我正在尝试使用 UDF 来解析我的 xml 文档。如果我运行以下命令,它就会起作用:
select xpath_string('<Application><applicationId>test</applicationId></Application>', '//applicationId') as id
from my_table limit 2;
输出为:
OK
test
test
如果现在我运行以下代码但添加命名空间,我将无法解析我的 XML:
select xpath_string('<Application xmlns="http://domain.com/test"><applicationId>test</applicationId></Application>', '//applicationId') as id
from my_table limit 2;
我只会得到空字符串。
我是不是做错了什么?或者我应该改进我的 XPath?
谢谢!
最佳答案
第二个 XML 引入了默认命名空间,它不仅影响声明默认命名空间的元素,还影响所有没有前缀的后代元素,包括 applicationId
元素:
xmlns="http://domain.com/test"
通常,您需要将前缀(例如 d
)映射到默认 namespace uri,并在 XPath 中使用该前缀://d:applicationId
。我不熟悉您使用的技术,因此不确定如何以及是否支持此方法。
以下是纯 XPath 1.0 替代方案:
//*[local-name()='applicationId' and namespace-uri()='http://domain.com/test']
或者如果您愿意,可以忽略 namespace :
//*[local-name()='applicationId']
关于xml - Hive XPath UDF 与命名空间一起不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36975939/