如何删除linq to xml文档中的重复节点
在下面的XML中,有两组节点具有相同的TxnID。使用linq to XML如何删除重复的PurchaseOrderRet节点如何删除linq to xml文档中的重复节点,linq,linq-to-xml,Linq,Linq To Xml,在下面的XML中,有两组节点具有相同的TxnID。使用linq to XML如何删除重复的PurchaseOrderRet节点 <?xml version="1.0"?> <QBPOSXML> <QBPOSXMLMsgsRs> <PurchaseOrderQueryRs> <PurchaseOrderRet> <TxnID>abc</TxnID> </Purc
<?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>
abc
xyz
abc
def
xyz
您可以使用以下语句:
XDocument doc = XDocument.Load(@"mypath\MyFile.xml");
将XML加载到XDocument
对象中
您可以使用GroupBy
来识别重复的
元素。将以下操作应用于文档后
:
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>
-
-
-
-
abc
-
-
xyz
-
-
def