0

假设我有这个 XML 文件:

<Names>
    <Name>
        <FirstName>John</FirstName>
        <LastName>Smith</LastName>
    </Name>
    <Name>
        <FirstName>James</FirstName>
        <LastName>White</LastName>
    </Name>
</Names>

现在我想打印节点的所有名称:

Names
Name
FirstName
LastName

我设法在 XmlNodeList 中获取所有内容,但我不知道 SelectNodes 是如何工作的。

XmlNodeList xnList = xml.SelectNodes(/*What goes here*/);

我想选择所有节点,然后执行 xnList 的 foreach (使用我假设的 .Value 属性)。

这是正确的方法吗?如何使用 selectNodes 选择所有节点?

4

3 回答 3

2

确保您在范围内具有 LINQ 和 LINQ to XML:

using System.Linq;
using System.Xml.Linq;

如果将它们加载到XDocument

var doc = XDocument.Parse(xml);    // if from string
var doc = XDocument.Load(xmlFile); // if from file

您可以执行以下操作:

doc.Descendants().Select(n => n.Name).Distinct()

这将为您提供文档中所有不同XName元素的集合。如果您不关心 XML 命名空间,可以将其更改为:

doc.Descendants().Select(n => n.Name.LocalName).Distinct()

这将为您提供所有不同元素名称的集合作为字符串。

于 2012-05-13T23:29:23.357 回答
0

有几种方法可以做到这一点。

使用 XDocument 和 LINQ-XML

foreach(var name in doc.Root.DescendantNodes().OfType<XElement>().Select(x => x.Name).Distinct()) 
{ 
    Console.WriteLine(name); 
} 

如果您使用的是 C# 3.0 或更高版本,则可以执行此操作

var data = XElement.Load("c:/test.xml"); // change this to reflect location of your xml file 
var allElementNames =  
(from e in in data.Descendants() 
select e.Name).Distinct();
于 2012-05-13T23:33:43.077 回答
0

添加

 using System.Xml.Linq;

然后你可以做

var element = XElement.Parse({Your xml string});

    Console.Write(element.Descendants("Name").Select(el => string.Format("{0} {1}", el.Element("FirstName").Value, el.Element("LastName").Value)));
于 2012-05-13T23:42:16.493 回答