在以下XML中,有两组具有相同TxnID的节点。使用linq to XML如何删除重复的PurchaseOrderRet节点。
<?xml version="1.0"?>
<QBPOSXML>
<QBPOSXMLMsgsRs>
<PurchaseOrderQueryRs>
<PurchaseOrderRet>
<TxnID>abc</TxnID>
</PurchaseOrderRet>
</PurchaseOrderQueryRs>
<PurchaseOrderQueryRs>
<PurchaseOrderRet>
<TxnID>xyz</TxnID>
</PurchaseOrderRet>
</PurchaseOrderQueryRs>
<PurchaseOrderQueryRs>
<PurchaseOrderRet>
<TxnID>abc</TxnID>
</PurchaseOrderRet>
<PurchaseOrderRet>
<TxnID>def</TxnID>
</PurchaseOrderRet>
<PurchaseOrderRet>
<TxnID>xyz</TxnID>
</PurchaseOrderRet>
</PurchaseOrderQueryRs>
</QBPOSXMLMsgsRs>
</QBPOSXML>
答案 0 :(得分:1)
您可以使用以下声明:
XDocument doc = XDocument.Load(@"mypath\MyFile.xml");
将XML加载到XDocument
对象中。
您可以使用GroupBy
来识别重复的<TxnID>
元素。将以下操作应用到doc
:
doc.Descendants("PurchaseOrderRet")
.GroupBy(p => p.Element("TxnID").Value)
.Where(g => g.Count() > 1)
.ToList()
.ForEach(x => x.Skip(1).Remove());
doc
包含以下XML:
- <QBPOSXML>
- <QBPOSXMLMsgsRs>
- <PurchaseOrderQueryRs>
- <PurchaseOrderRet>
<TxnID>abc</TxnID>
</PurchaseOrderRet>
</PurchaseOrderQueryRs>
- <PurchaseOrderQueryRs>
- <PurchaseOrderRet>
<TxnID>xyz</TxnID>
</PurchaseOrderRet>
</PurchaseOrderQueryRs>
- <PurchaseOrderQueryRs>
- <PurchaseOrderRet>
<TxnID>def</TxnID>
</PurchaseOrderRet>
</PurchaseOrderQueryRs>
</QBPOSXMLMsgsRs>
</QBPOSXML>