从xml中删除特定节点

本文关键字:节点 删除 xml | 更新日期: 2023-09-27 18:12:27

这是我的xml

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

我想删除"结果"正下方的"消息"节点当我试图通过使用以下代码删除它时:

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

它正在删除"记录"下的"消息",但我不想这样。我只想删除"结果"下的"消息">

预期xml:

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

请推荐我到这儿来。

从xml中删除特定节点

Descendants()将返回所有元素(children和grand-children等(,而Elements()只返回直接的children。

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

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

void Main()
{
    string xml =@"
 <result>
  <client></client>
  <message></message>
  <record>
     <message></message>
   </record>
</result>";
XElement root = XElement.Parse(xml);    
root.Element("message").Remove();    
}

删除根节点下的确切元素"message"。

您可以调用Element(name),它返回单个XElement(调用ElementsDescendants返回IEnumerable<XElement>(:

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