2015-09-05 53 views
-2

删除XML特定子集我有以下XML文件如何使用C#

<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)由具有EX_ID的CORALL内的任何子集合用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> 

任何帮助/想法实现这一目标开始?

+0

听起来像一个快乐的好一系列要求。你能行的! – MickyD

+0

我能够使用XMLnode和for循环读取来自XMl文件的数据。我无法做的是删除整个子集合 –

+0

太棒了!任何代码显示?这将帮助我们帮助你。祝你好运! – MickyD

回答

1

这里的诀窍是找到你问什么,然后导航到它的父删除匹配的节点:

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); 
} 
+0

是的,这是有效的。但是,如果我们需要搜索2条件,如EX_ID以h开始并且Amt = 0.00。我们有办法只删除那个子集合 –

+0

我编辑了这个答案以反映这个新的需求 –