hive xpath udf和名称空间一起不起作用

dldeef67  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

我正在尝试使用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吗?
谢谢!

prdp8dxp

prdp8dxp1#

第二个xml引入了默认名称空间,它不仅影响声明默认名称空间的元素,还影响所有没有前缀的子元素,包括 applicationId 元素:

xmlns="http://domain.com/test"

通常,你需要Map一个前缀,比如 d ,并在xpath中使用该前缀: //d:applicationId . 我不熟悉您使用的技术,因此不确定如何以及是否支持这种方法。
以下是纯xpath 1.0替代方案:

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

或者忽略命名空间(如果愿意):

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

相关问题