Удалить все элементы XML без атрибутов C # - PullRequest
0 голосов
/ 24 ноября 2011

Я хотел бы знать, как удалить из XML-файла все элементы, которые не имеют первого атрибута типа name или ref .Дочерние элементы, которые содержат первый атрибут требуемого типа, должны оставаться, даже если родительский элемент был удален, и их следует просто переместить вверх в иерархии

Например, если это входной файл:

<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 Ответ

3 голосов
/ 24 ноября 2011

Например, таким образом:

 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());            
      }
 }
...