Hive XPath UDF 与命名空间一起不起作用

Hive XPath UDF alongside namespaces doesn't work

我正在尝试使用 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)映射到默认名称空间 uri,并在 XPath 中使用该前缀://d:applicationId。我不熟悉您使用的技术,因此不确定这种方法如何以及是否受支持。

以下是纯 XPath 1.0 替代方案:

//*[local-name()='applicationId' and namespace-uri()='http://domain.com/test']

或者如果你愿意,可以忽略命名空间:

//*[local-name()='applicationId']