Je veux parcourir tous les nœuds d'un fichier XML et imprimer leurs noms. Quelle est la meilleure façon de procéder? J'utilise .NET 2.0.
Je pense que le moyen le plus rapide et le plus simple serait d'utiliser un XmlReader , cela ne nécessitera aucune récursivité et une empreinte mémoire minimale.
Voici un exemple simple, pour plus de compacité, je viens d'utiliser une chaîne simple bien sûr, vous pouvez utiliser un flux à partir d'un fichier, 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);
}
}
Le résultat de ce qui précède sera
parent
child
nested
child
other
Une liste de tous les éléments du document XML.
Vous pouvez utiliser XmlDocument . Certains XPath peuvent également être utiles.
Juste un exemple simple
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
}
Voici ce que j'ai rapidement écrit pour moi:
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);
}
}
}
Pour l'utiliser, j'ai utilisé quelque chose comme:
var doc = new XmlDocument();
doc.Load(somePath);
doc.IterateThroughAllNodes(
delegate(XmlNode node)
{
// ...Do something with the node...
});
Peut-être que cela aide quelqu'un là-bas.
Pour parcourir tous les éléments
XDocument xdoc = XDocument.Load("input.xml");
foreach (XElement element in xdoc.Descendants())
{
Console.WriteLine(element.Name);
}
Un algorithme récursif qui analyse un XmlDocument
Voici un exemple - lecture récursive d'un document xml et utilisation d'expressions régulières pour obtenir le conten
Voici un autre exemple récursif - http://www.Java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html