xpath - 嵌套 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><?xml version="1.0" encoding="UTF-16"?>
<Data xmlns="nnn-mmm-com">
<Order Action="Remove" >
<Instrument InstID="1"></Order><
/Data>
</RawData>
</OrderData>
我正在尝试提取以下值:Id Action InstID
获取 Id 没有问题,但深入到 RawData 中的片段证明超出了我的范围。感激地收到任何指示
(我计划使用 Hive-XML-SerDe 这是 xpath 1.0 在 Hive 中执行 xpath 查询)
谢谢
解决方案
使用 XPath 3.1,您可以解析嵌入的 XML 文档并将其转换为节点树,然后您可以使用路径表达式对其进行处理。所以:
/OrderData/RawData/parse-xml(.)/*:Data/*:Instrument/@InstID
应该得到你想要的。
你没有说你的库支持什么版本的XPath,这通常意味着它只支持1.0,所以你可能需要找一个不同的库。
推荐阅读
- javascript - JS 小书签在另一个站点中打开站点
- javascript - Bootstrap 4 在右侧显示下拉子菜单
- gitlab - 你如何在 Gitlab markdown 中将文本居中?
- python - 火炬。当最终张量中包含多个值时可以使用 autograd 吗?
- java - Android Studio 我的 rawQuery 或“SELECT”不返回任何内容
- java - 在投注网站上提取球队只给了我 13 支球队的限制
- django - /customer/1/list/ 处的 NoReverseMatch
- spring - thymeleaf - 选定选项的通行证 ID
- java-8 - 将不同结果类型的多个“Try”实例组合为应用程序
- python - Python 中的 OOP。我如何做类方法?