如何从XML文档中获取特定名称的元素作为XML字符串?(带有XDocument)

本文关键字:XML 字符串 带有 XDocument 元素 文档 获取 定名称 | 更新日期: 2023-09-27 18:26:31

如何从XML文档中获取特定名称的元素作为XML字符串?(带XDocument)

比如说我有这个:

<root>
    <orange id="orange1"></orange>
    <orange id="orange2"></orange>
    <orange id="orange3"></orange>
    <apple id="apple1"></apple>
    <apple id="apple2"></apple>
    <apple id="apple3"></apple>
</root>

我怎么能只得到苹果的XML?即这三行的XML字符串?

我当前的代码是:

using (TextReader reader = File.OpenText(xmlFilePath))
{
    XDocument xmlDocument = XDocument.Load(reader);
    string items = xmlDocument.Descendants("apple").ToString();
}

但在本例中,items最终为:System.Xml.Linq.XContainer+<GetDescendants>d__a,而不是XML字符串。我似乎找不到任何方法可以为匹配的元素返回XML。

如何从XML文档中获取特定名称的元素作为XML字符串?(带有XDocument)

问题是您在调用Descendants()的结果上调用ToString()。目前还不清楚你期望它做什么,但你正在正确地获取元素。例如:

using (TextReader reader = File.OpenText(xmlFilePath))
{
    // Any reason for not using XDocument.Load(xmlFilePath)?
    XDocument xmlDocument = XDocument.Load(reader);
    var items = xmlDocument.Descendants("apple");
    foreach (var item in items)
    {
        Console.WriteLine(item.Attribute("id").Value); // Or whatever
    }
}

如果您想将每个XElement转换为字符串的结果连接起来,可以使用:

var items = string.Join("", xmlDocument.Descendants("apple"));

var items = string.Concat(xmlDocument.Descendants("apple"));

使用String.Concat(xmlDocument.Descendants("apple"))

您正在对xml元素的集合使用ToString(),因此您得到了结果。如果我正确阅读了你的要求,你需要这样的东西:

var items = String.Join(Environment.NewLine,
                        xmlDocument.Descendants("apple")
                                   .Select(e => e.ToString()));