首页 > 解决方案 > 使用 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 节点。

标签: xmlxpath

解决方案


使用 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


推荐阅读