首页 > 解决方案 > 嵌套 XML 片段的 XMLPath 查询

问题描述

我正在尝试编写一个 xpath 查询来从 xml 文档中提取数据。不幸的是,该文档中嵌入了一个 xml 片段,该片段似乎已丢失其编码(< 已变为 < > 已变为 > 等)。

xml 文档的一个示例是:

<OrderData xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Id>1</Id>
    <RawData>&lt;?xml version="1.0" encoding="UTF-16"?&gt;
        &lt;Data xmlns="nnn-mmm-com"&gt;
            &lt;Order Action="Remove" &gt;
            &lt;Instrument InstID="1"&gt;&lt;/Order&gt;&lt;
        /Data&gt;
    </RawData>
</OrderData>

我正在尝试提取以下值:Id Action InstID

获取 Id 没有问题,但深入到 RawData 中的片段证明超出了我的范围。感激地收到任何指示

(我计划使用 Hive-XML-SerDe 这是 xpath 1.0 在 Hive 中执行 xpath 查询)

谢谢

标签: xpath

解决方案


使用 XPath 3.1,您可以解析嵌入的 XML 文档并将其转换为节点树,然后您可以使用路径表达式对其进行处理。所以:

/OrderData/RawData/parse-xml(.)/*:Data/*:Instrument/@InstID

应该得到你想要的。

你没有说你的库支持什么版本的XPath,这通常意味着它只支持1.0,所以你可能需要找一个不同的库。


推荐阅读