删除没有属性C#的所有XML元素

时间:2011-11-24 06:11:02

标签: c# xml linq-to-xml

我想知道如何删除xml文件中没有 name ref <的第一个属性的所有元素/ EM> 即可。包含所需类型的第一个属性的子元素必须保留,即使父项已被删除,它们应该只是在层次结构中向上移动

例如,如果这是输入文件:

<xs:element name="Body" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="Client" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="Risk" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="Claim" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="Complaint" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="ClientFee" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="User" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

我希望得到以下结果:

<xs:element name="Body" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element ref="Client" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="Risk" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="Claim" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="Complaint" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="ClientFee" minOccurs="0" maxOccurs="unbounded" />
      <xs:element ref="User" minOccurs="0" />
</xs:element>

1 个答案:

答案 0 :(得分:3)

例如这样:

 void RemoveRecurence(XElement e) {
      foreach(var child in e.Elements()) {
           RemoveRecurence(child);
      }

      if (e.Attribute("name") == null && e.Attribute("ref") == null) {
           e.ReplaceWith(e.Elements());            
      }
 }