正在从C#中具有属性的XML中删除元素

本文关键字:XML 删除 元素 属性 | 更新日期: 2023-09-27 18:28:33

我是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>

正在从C#中具有属性的XML中删除元素

Elements将只返回当前节点的子元素,而不返回子元素的子元素(也称为子元素)。然后选择并移除属性,而不是元素。由于该子元素和属性不存在,因此您有一个空序列,因此不会删除任何内容。

您要做的是查找元素中包含name属性的所有子代元素。尝试:

XNamespace xs = "http://www.w3.org/2001/XMLSchema"
xml.Descendants(xs + "element")
    .Where(x => (string)x.Attribute("name") == "companyKey")
    .Remove();