从xml中删除特定节点

时间:2015-09-11 18:18:39

标签: c# linq

这是我的xml

 <result>
  <client></client>
  <message></message>
  <record>
     <message></message>
   </record>
</result>

我想删除&#34;消息&#34;正好位于&#34;结果&#34; 当我尝试使用以下代码删除它时:

 responseXml.Descendants().Where(e => e.Name == "client" || e.Name == "message").Remove();

正在删除&#34;消息&#34;这是&#34;记录&#34;但我不想要这个。 我只想删除&#34; message&#34;在&#34;结果&#34;

预期xml:

 <result>
  <client></client>
  <record>
     <message></message>
   </record>
</result>

请在这里建议我。

3 个答案:

答案 0 :(得分:5)

Descendants()将返回所有元素(子女和子女等),而Elements()只会返回直接子女。

responseXml.Root.Elements().Where(e => e.Name == "message").Remove();

您可以使用较短的.Element("message")语法,但请注意,此方法仅返回找到的第一个元素。如果您有多个<message>,它将不会返回/删除它们。

答案 1 :(得分:1)

void Main()
{
    string xml =@"
 <result>
  <client></client>
  <message></message>
  <record>
     <message></message>
   </record>
</result>";

XElement root = XElement.Parse(xml);    
root.Element("message").Remove();    
}

直接在根节点下删除确切的元素“message”。

答案 2 :(得分:1)

您可以拨打Element(name),其中会返回一个XElement(调用ElementsDescendants返回IEnumerable<XElement>):

responseXml.Root.Element("message").Remove();