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

标签 xml hadoop xpath hive xml-namespaces

我正在尝试使用 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/

相关文章:

file - Hadoop 定期生成的文件

java - "renew until"的 Kerberos 自动更新

html - XPath//* vs//元素 vs//

c# - 使用 Unity XML 配置文件在构造函数中注入(inject)复杂对象

c# - 如何使用 XmlSerializer 来处理不同的命名空间版本?

hadoop - sqoop 自由格式查询从表中导入 n 条记录

postgresql - SQL/XML 中的 XPath1,计数元素返回空

python - 使用 xpath 告诉 selenium 点击哪里?

xml - 不合格的 XSD 全局属性引用

java - 在 FTP 服务器上创建 XML 文件,无需在本地创建物理文件