C#:获取带有所有父标签的 XML 节点内容

标签 c# xml linq

有一个 XML 文件:

<favorites>
    <movies>
        <movie title="The Godfather" year="1974" />
        <movie title="The Terminator" year="1984" />
        <movie title="Dark Knight" year="2008" />
    </movies>

    <books>
        <book title = "1984" author="George Orwell" />
        <book title = "Robinson Crusoe"" author="Daniel Defoe"/>
        <book title = "Frankenstein" author="Mary Shelly" />
    </books>

    <music>
        <artist title = "Beatles" genre="rock" />
        <artist title = "Queen" genre="rock" />
        <artist title = "Metallica" rock="heavy metal" />
    </music>
</favorites>

我需要使用所有父节点和子节点过滤特定节点(音乐)。 结果应该是:

<favorites>
  <music>
    <artist title="Beatles" genre="rock" />
    <artist title="Queen" genre="rock" />
    <artist title="Metallica" rock="heavy metal" />
  </music>
</favorites>

我找到了使用 System.XML 和 LINQ 过滤 XML 的解决方案:

 XDocument xdoc = XDocument.Parse(xmlString);    
 xdoc.Descendants()
     .Where(x => x.Name != "favorites" & x.Name != "music" & x.Name != "artist")
     .Remove();    
 Console.WriteLine(xdoc.ToString());

工作样本在这里:https://dotnetfiddle.net/NnA4h7#

问题是我必须在查询中指定所有父节点和子节点。

有没有办法通过仅指定想要的节点(电影、书籍、音乐)来获得相同的结果?

最佳答案

这是另一种更简单的方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            XElement favorites = doc.Descendants("favorites").FirstOrDefault();

            favorites.ReplaceNodes(favorites.Element("music")));
        }
    }
}

关于C#:获取带有所有父标签的 XML 节点内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49867071/

相关文章:

c# - LINQ 无法识别 select 子句中的连接表

C# - 从 DataTable 中删除具有相同列值的行

java - 具有多个父节点的 DocumentBuilderFactory

c# - 如何在 C# 中使用 GtkBuilder 连接林间空地信号?

c# - 在 Byte[] 数组中查找第一个特定字节 c#

c# - 从 HL7 中提取 PDF

xml - MSXML API 的文档在哪里?

javascript - angularjs - 我如何获得内容长度标题

c# - 如何在 LINQ 中为 var 编制索引?

c# - 在 SQL Server(C# 客户端)中批量插入大量数据的最快方法是什么