如何使用c#删除XML中的特定子集合

本文关键字:子集合 XML 何使用 删除 | 更新日期: 2023-09-27 18:11:23

我有下面的XML文件

<Data>
 <Collection name="CD" type="Group">
  <Column name="CD">0</Column> 
  <Column name="ATXR">01/02/1753 00:00:00.020</Column> 
 </Collection>
 <Collection name="CALL" type="Group">
  <SubCollection name="CALL" type="Row">
  <Column name="PRCF">0072</Column> 
  <Column name="CDML">0</Column> 
  <Column name="ATXR">NULL</Column> 
  </SubCollection>
 </Collection>
 <Collection name="CORALL" type="Group">
  <SubCollection name="CORALL" type="Row">
  <Column name="ID">AA</Column> 
  <Column name="AMT">202.8000</Column> 
  <Column name="EX_ID">h27</Column> 
  </SubCollection>
  <SubCollection name="CORALL" type="Row">
  <Column name="ID">CE</Column> 
  <Column name="AMT">0.00</Column> 
  <Column name="EX_ID">III</Column> 
  </SubCollection>
  </Collection>
</Data>

和我需要完全删除子集合时,它符合以下条件。1)当集合名称为CORALL时2) CORALL中EX_ID以h

开头的任何子集合

最终的XML文件应该是这样的

<Data>
 <Collection name="CD" type="Group">
  <Column name="CD">0</Column> 
  <Column name="ATXR">01/02/1753 00:00:00.020</Column> 
 </Collection>
 <Collection name="CALL" type="Group">
  <SubCollection name="CALL" type="Row">
  <Column name="PRCF">0072</Column> 
  <Column name="CDML">0</Column> 
  <Column name="ATXR">NULL</Column> 
  </SubCollection>
 </Collection>
 <Collection name="CORALL" type="Group">
  <SubCollection name="CORALL" type="Row">
  <Column name="ID">CE</Column> 
  <Column name="AMT">0.00</Column> 
  <Column name="EX_ID">III</Column> 
  </SubCollection>
  </Collection>
</Data>

有什么帮助或想法来实现这个吗?

如何使用c#删除XML中的特定子集合

这里的技巧是找到请求的内容并导航到它的父节点以删除匹配的节点:

foreach (XmlNode subCollection in xml.SelectNodes(
 "//Collection[@name='CORALL']/SubCollection[Column[@name='EX_ID' and starts-with(., 'h')] and Column[@name='AMT'   and . = '0.00']]"))
{
    // SubCollection.Collection.RemoveChild(SubCollection)
    subCollection.ParentNode.RemoveChild(subCollection);
}