使用属性从C#中的XML中删除元素

时间:2015-12-31 19:08:18

标签: c# xml

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

1 个答案:

答案 0 :(得分:1)

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

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

XNamespace xs = "http://www.w3.org/2001/XMLSchema"

xml.Descendants(xs + "element")
    .Where(x => (string)x.Attribute("name") == "companyKey")
    .Remove();