如何删除linq to xml文档中的重复节点

如何删除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中,有两组节点具有相同的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>

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