Sql 在配置单元中,如何使用explode(XPATH(..)函数读取XML中的空/空标记?
在下面的配置单元查询中,我还需要从XML内容中读取null/empty“string”标记。现在在Sql 在配置单元中,如何使用explode(XPATH(..)函数读取XML中的空/空标记?,sql,xml,xpath,hive,hiveql,Sql,Xml,Xpath,Hive,Hiveql,在下面的配置单元查询中,我还需要从XML内容中读取null/empty“string”标记。现在在XPATH()列表中只考虑非空的“string”标记 with your_data as ( select '<ParentArray> <ParentFieldArray> <Name>ABCD</Name> <Value> <string>111</st
XPATH()
列表中只考虑非空的“string”标记
with your_data as (
select '<ParentArray>
<ParentFieldArray>
<Name>ABCD</Name>
<Value>
<string>111</string>
<string></string>
<string>222</string>
</Value>
</ParentFieldArray>
<ParentFieldArray>
<Name>EFGH</Name>
<Value>
<string/>
<string>444</string>
<string></string>
<string>555</string>
</Value>
</ParentFieldArray>
</ParentArray>' as xmlinfo
)
select Name, Value
from your_data d
lateral view outer explode(XPATH(xmlinfo, 'ParentArray/ParentFieldArray/Name/text()')) pf as Name
lateral view outer explode(XPATH(xmlinfo, concat('ParentArray/ParentFieldArray[Name="', pf.Name, '"]/Value/string/text()'))) vl as Value;
这里的问题是
XPATH
返回NodeList,如果它包含空节点,则不包括在列表中
使用某些字符串(在XPATH中)进行连接:concat(/Value/string/text(),“”)
在这里不起作用:
原因:javax.xml.xpath.XPathExpressionException:
com.sun.org.apache.xpath.internal.XPathException:无法转换
#向节点列表添加字符串
在
com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:195)
简单的解决方法是将
和
替换为NULL
,然后可以将“NULL”字符串转换为NULL
演示:
您好,您也可以看看下面链接中解释的类似场景吗@leftjoin@RKR好的,回答
Name Value
ABCD 111
ABCD
ABCD 222
EFGH
EFGH 444
EFGH
EFGH 555
with your_data as (
select '<ParentArray>
<ParentFieldArray>
<Name>ABCD</Name>
<Value>
<string>111</string>
<string></string>
<string>222</string>
</Value>
</ParentFieldArray>
<ParentFieldArray>
<Name>EFGH</Name>
<Value>
<string/>
<string>444</string>
<string></string>
<string>555</string>
</Value>
</ParentFieldArray>
</ParentArray>' as xmlinfo
)
select name, case when value='NULL' then null else value end value
from (select regexp_replace(xmlinfo,'<string></string>|<string/>','<string>NULL</string>') xmlinfo
from your_data d
) d
lateral view outer explode(XPATH(xmlinfo, 'ParentArray/ParentFieldArray/Name/text()')) pf as Name
lateral view outer explode(XPATH(xmlinfo, concat('ParentArray/ParentFieldArray[Name="', pf.Name, '"]/Value/string/text()'))) vl as value
name value
ABCD 111
ABCD
ABCD 222
EFGH
EFGH 444
EFGH
EFGH 555