Jon*_*eet 23
在LINQ to XML中,它非常简单:
XDocument doc = XDocument.Load("test.xml"); // Or whatever
var allElements = doc.Descendants();
Run Code Online (Sandbox Code Playgroud)
因此,要查找具有特定属性的所有元素,例如:
var matchingElements = doc.Descendants()
.Where(x => x.Attribute("foo") != null);
Run Code Online (Sandbox Code Playgroud)
这是假设你想要所有元素.如果您想要所有节点(包括文本节点等,但不包括属性作为单独的节点),您可以使用它DescendantNodes()
.
编辑:LINQ to XML中的命名空间很不错.你用的是:
var matchingElements = doc.Descendants()
.Where(x => x.Attribute(XNamespace.Xmlns + "aml") != null);
Run Code Online (Sandbox Code Playgroud)
或者用于不同的命名空间:
XNamespace ns = "http://some.namespace.uri";
var matchingElements = doc.Descendants()
.Where(x => x.Attribute(ns + "foo") != null);
Run Code Online (Sandbox Code Playgroud)
请参阅此处:迭代XML文件中的所有节点
不久:
string xml = @"
<parent>
<child>
<nested />
</child>
<child>
<other>
</other>
</child>
</parent>
";
XmlReader rdr = XmlReader.Create(new System.IO.StringReader(xml));
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Element)
{
Console.WriteLine(rdr.LocalName);
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,最简单的解决方案是使用 XPath。如果您有 .NET 2,这也有效:
var testDoc = new XmlDocument();
testDoc.LoadXml(str);
var tmp = testDoc.SelectNodes("//*"); // match every element
Run Code Online (Sandbox Code Playgroud)