我想知道如何删除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>
答案 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());
}
}