如果内部标记在C#中使用Linq匹配值,则删除XML节点

时间:2014-10-03 21:49:42

标签: c# xml linq

<column>
    <format>boolicon</format>
    <heading>Attachment</heading>
    <prop>urn:schemas:httpmail:hasattachment</prop>
    <type>boolean</type>
    <bitmap>1</bitmap>
    <width>10</width>
    <style>padding-left:3px;text-align:center</style>
    <editable>0</editable>
    <displayformat>3</displayformat>
</column>
<column>
    <heading>From</heading>
    <prop>urn:schemas:httpmail:fromname</prop>
    <type>string</type>
    <width>68</width>
    <style>padding-left:3px;text-align:left</style>
    <editable>0</editable>
    <displayformat>1</displayformat>
</column>
<column>
    <heading>Subject</heading>
    <prop>urn:schemas:httpmail:subject</prop>
    <type>string</type>
    <width>326</width>
    <style>padding-left:3px;text-align:left</style>
    <editable>1</editable>
</column>

如果标题等于“主题”

,我想删除列节点
(from node in xdoc.Descendants("column") select node).ToList().ForEach(x=>x.Remove());

仅当标题与“主题”匹配时才尝试选择节点。

提前致谢。

2 个答案:

答案 0 :(得分:5)

我认为,一个简单的XPath可以帮助你

xdoc.XPathSelectElement("//column[heading='Subject']").Remove();

PS:不要忘记使用System.Xml.XPath包含;

答案 1 :(得分:3)

您可以添加简单的where子句,仅过滤具有子<column>等于<heading>的{​​{1}}元素:

"Subject"

或者使用方法语法:

(from node in xdoc.Descendants("column") 
 where (string)node.Element("heading") == "Subject" 
 select node
 ).Remove();