[英]Iterating through all nodes in XML file
I want to iterate through all nodes in an XML file and print their names. 我想迭代XML文件中的所有节点并打印它们的名称。 What is the best way to do this?
做这个的最好方式是什么? I am using .NET 2.0.
我使用的是.NET 2.0。
You can use XmlDocument . 您可以使用XmlDocument 。 Also some XPath can be useful.
一些XPath也很有用。
Just a simple example 只是一个简单的例子
XmlDocument doc = new XmlDocument();
doc.Load("sample.xml");
XmlElement root = doc.DocumentElement;
XmlNodeList nodes = root.SelectNodes("some_node"); // You can also use XPath here
foreach (XmlNode node in nodes)
{
// use node variable here for your beeds
}
I think the fastest and simplest way would be to use an XmlReader , this will not require any recursion and minimal memory foot print. 我认为最快最简单的方法是使用XmlReader ,这不需要任何递归和最小内存占用。
Here is a simple example, for compactness I just used a simple string of course you can use a stream from a file etc. 这是一个简单的例子,对于紧凑性我只使用了一个简单的字符串,当然你可以使用文件中的流等。
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);
}
}
The result of the above will be 以上结果将是
parent
child
nested
child
other
A list of all the elements in the XML document. XML文档中所有元素的列表。
This is what I quickly wrote for myself: 这就是我自己为自己写的:
public static class XmlDocumentExtensions
{
public static void IterateThroughAllNodes(
this XmlDocument doc,
Action<XmlNode> elementVisitor)
{
if (doc != null && elementVisitor != null)
{
foreach (XmlNode node in doc.ChildNodes)
{
doIterateNode(node, elementVisitor);
}
}
}
private static void doIterateNode(
XmlNode node,
Action<XmlNode> elementVisitor)
{
elementVisitor(node);
foreach (XmlNode childNode in node.ChildNodes)
{
doIterateNode(childNode, elementVisitor);
}
}
}
To use it, I've used something like: 要使用它,我使用过类似的东西:
var doc = new XmlDocument();
doc.Load(somePath);
doc.IterateThroughAllNodes(
delegate(XmlNode node)
{
// ...Do something with the node...
});
Maybe it helps someone out there. 也许它可以帮助那里的人。
To iterate through all elements 迭代所有元素
XDocument xdoc = XDocument.Load("input.xml");
foreach (XElement element in xdoc.Descendants())
{
Console.WriteLine(element.Name);
}
A recursive algorithm that parses through an XmlDocument
一种解析
XmlDocument
递归算法
Here is an example - Recursively reading an xml document and using regex to get contents 下面是一个示例 - 递归读取xml文档并使用正则表达式获取内容
Here is another recursive example - http://www.java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html 这是另一个递归示例 - http://www.java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.