我是C#的新手。我试图删除具有 name =“companyKey”
属性的元素我已尝试通过以下代码执行此操作:
XElement xml = XElement.Parse(results);
xml.Elements("NewDataSet")
.Attributes("companyKey").Remove();
DataSet ds = new DataSet();
using (var reader = xml.CreateReader())
ds.ReadXml(reader);
但是,不排除/删除元素。任何帮助/线索将不胜感激。
我用来应用此代码的XML是:
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table1">
<xs:complexType>
<xs:sequence>
<xs:element name="companyKey" type="xs:string" minOccurs="0" />
<xs:element name="phoneVisits" type="xs:int" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:1)
Elements
只返回当前节点中的子元素,而不是子节点的孩子(也称为后代)。然后,选择并删除属性,而不是元素。由于该子元素和属性不存在,因此您有一个空序列,因此不会删除任何内容。
您要做的是找到元素包含您的name属性的所有后代元素。尝试:
XNamespace xs = "http://www.w3.org/2001/XMLSchema"
xml.Descendants(xs + "element")
.Where(x => (string)x.Attribute("name") == "companyKey")
.Remove();