我需要一种解析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节点。
答案 0 :(得分:0)
您可以使用以下XPath-2.0表达式创建不包含标题的输出:
for $i in //RecordDetail return concat($i/Product_ID/text(),'		',$i/preceding-sibling::RecordHeader[1]/Record_ID,'
')
其输出为
1-1X00 HE7
1-3788 HE7
答案 1 :(得分:0)
对于XPath 1.0,您可以使用以下xpath:
//RecordHeader/following-sibling::RecordDetail/concat(concat(Product_ID/text(), ' '), preceding-sibling::RecordHeader/Record_ID/text())
它的作用是将RecordHeader
的所有同级兄弟的Product_ID
附加到其先前的同级兄弟RecordHeader
的{{1}}。