xml - 使用 xPath 映射兄弟节点
问题描述
我需要一种方法来解析 XML 文件并将某些节点与其兄弟节点链接起来。例如,在这个 XML(不是我的实际数据,只是一个示例)中,我试图将所有 RecordDetail 节点与前面的 RecordHeader 链接。
XML:
<RecordSet>
<RecordHeader>
<Record_ID>HE7</Record_ID>
<DetailRecords>2</DetailRecords>
</RecordHeader>
<RecordDetail>
<Product_ID>1-1X00</Product_ID>
<Quantity>5</Quantity>
</RecordDetail>
<RecordDetail>
<Product_ID>1-3788</Product_ID>
<Quantity>1</Quantity>
</RecordDetail>
</RecordSet>
预期输出:
Product_ID Record_ID
----------------------
1-1X00 HE7
1-3788 HE7
我可以使用以下表达式获取兄弟节点,但它只列出一次:
//RecordDetail/preceding-sibling::RecordHeader/Record_ID/node()
有没有办法列出每个RecordDetail 节点,并附上它之前的 RecordHeader 节点?
总会有一个记录头,后面跟着任意数量的 RecordDetail 节点。
解决方案
使用 XPath 1.0,您可以使用以下 xpath:
//RecordHeader/following-sibling::RecordDetail/concat(concat(Product_ID/text(), ' '), preceding-sibling::RecordHeader/Record_ID/text())
它的作用是让所有兄弟姐妹都RecordHeader
将其Product_ID
附加到其前面RecordHeader
的兄弟姐妹中Record_ID
。
推荐阅读
- javascript - 使用 onClick 在 Table.Row 中单击时转到链接
- java - Heroku - 由于测功机过载,Java 服务不断崩溃
- php - Laravel 等效中的未知列
- c# - Uri - 附加路径
- ios - 如何在 UITableViewCell 中使用动态内容配置 stackview?
- excel - 根据变量插入行
- python - 如何过滤包含列的相似模式但另一列的值不同的行
- react-native - 在 react-native 应用程序中安装 date-fns 错误后,纱线启动失败
- unity3d - How can I select a unit in Unity and activate the Canvas on that unit?
- android - 无法启动 Android Studio(当它已经工作了很多次时)