【问题标题】:Remove specific node from xml从 xml 中删除特定节点
【发布时间】:2015-09-11 18:18:39
【问题描述】:

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

请在这里给我建议。

【问题讨论】:

  • 为什么&lt;client&gt;&lt;/client&gt; 仍在您预期的 xml 中?
  • 考虑检查您正在使用的方法的行为 - 有时您可能会自己找到答案。为此 - stackoverflow.com/questions/3705020/…

标签: c# linq


【解决方案1】:

Descendants() 将返回所有元素(子元素和孙子元素等),而 Elements() 将仅返回直接子元素。

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

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

【讨论】:

    【解决方案2】:
    void Main()
    {
        string xml =@"
     <result>
      <client></client>
      <message></message>
      <record>
         <message></message>
       </record>
    </result>";
    
    XElement root = XElement.Parse(xml);    
    root.Element("message").Remove();    
    }
    

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

    【讨论】:

    • 感谢您的快速回复。它现在工作正常。 :)
    【解决方案3】:

    你可以调用Element(name),它返回一个XElement(调用ElementsDescendants返回一个IEnumerable&lt;XElement&gt;):

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

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多