C#XML删除除特定元素及其子元素以外的所有内容

时间:2019-05-22 09:13:24

标签: c# xml

我有这个XML文件:

<XtraSerializer version="1.0" application="View">

  <property name="Columns" iskey="true" value="23">
    <property name="Item23" isnull="true" iskey="true">
      <property name="Name">colworkspace</property>
      <property name="Width">75</property>
      <property name="MinWidth">20</property>
      <property name="MaxWidth">0</property>
    </property>
  </property>

  <property name="FormatRules" iskey="true" value="1">
    <property name="Item1" isnull="true" iskey="true">
      <property name="ColumnName">colid</property>
      <property name="Name">Format0</property>
      <property name="RuleType">#FormatConditionRuleExpression</property>
      <property name="Rule" isnull="true" iskey="true">
        <property name="Expression">[id] &gt; 1L</property>
        <property name="Appearance" isnull="true" iskey="true">
          <property name="Options" isnull="true" iskey="true">
            <property name="UseForeColor">true</property>
          </property>
          <property name="ForeColor">195, 214, 155</property>
        </property>
      </property>
    </property>
  </property>

</XtraSerializer>

它具有两个属性,ColumnsFormatRules。我想删除Columns属性,并保留FormatRules属性。我所做的是创建一个方法,该方法删除所有不具有name = FormatRules的元素,但也将删除FormatRules属性的所有子元素,这是我不希望的。这是我的代码:

XDocument doc = XDocument.Load(path);
IEnumerable<XElement> element = from node in doc.Descendants("property")
                                let attr = node.Attribute("name")
                                where attr != null && attr.Value != "FormatRules"
                                select node;
element.ToList().ForEach(x => x.Remove());
doc.Save(path);

这将产生以下XML文件:

<XtraSerializer version="1.0" application="View">         
  <property name="FormatRules" iskey="true" value="1">       
</XtraSerializer>

1 个答案:

答案 0 :(得分:1)

//IEnumerable<XElement> element = from node in doc.Descendants("property")
  IEnumerable<XElement> element = from node in doc.Root.Elements("property")