在配置单元上使用xpath获取xml节点的名称

yhqotfr8  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(287)

我有一个xml文档,如下所示:

<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this weekend!</body>
</note>

在Hive上,我可以使用 xpath 使用以下命令检索xml文档中每个节点的文本: select xpath(xml_text,'//*[name()='note']//text()') from table_test; 但是,我不知道在配置单元上使用哪个xpath命令来检索文本的xml节点名对于上面的示例,我希望能够返回 ["to","from","heading","body"] ,表示xml文件中标记的xml节点。感谢您的帮助。

w7t8yxp5

w7t8yxp51#

一般来说,你只能使用 xpath 获取文本或元素属性-而不是节点的名称。
因此,有两种选择:您可以编写(或在线查找)一个自定义udf,用于返回给定xpath的节点名称。
或者,你可以用这个黑客:

select xpath(regexp_replace(xml_text,'<([\\w]+),'<$1 nodename=\'$1\' '),note/*/@nodename)

说明:它将nodename属性添加到任何xml元素中( <to> -> <to nodename='to'> )它也可以在一些文本中添加它,但是由于您只提取 nodename 属性-这不重要。
顺便说一下,您可以将文本查询重写为: select xpath(xml_text,'note/*/text()') from table_test;

相关问题