Chcę iterować przez wszystkie węzły w pliku XML i wydrukować ich nazwy. Jaki jest najlepszy sposób na zrobienie tego? Korzystam z .NET 2.0.Iterowanie przez wszystkie węzły w pliku XML
Odpowiedz
myślę najszybszym i najprostszym sposobem byłoby użycie XmlReader, to nie będzie wymagają dowolnej rekurencji i minimalnego wydruku stopki pamięci.
Oto prosty przykład, dla zwięzłości używałem prosty ciąg oczywiście można użyć strumienia z pliku itp
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);
}
}
Wynikiem powyższego będzie
parent
child
nested
child
other
Lista wszystkich elementów w dokumencie XML.
Można użyć XmlDocument. Również niektóre XPath mogą być przydatne.
Wystarczy prosty przykład
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
}
rekurencyjna algorytm, który analizuje poprzez XmlDocument
Oto przykład - Recursively reading an xml document and using regex to get contents
Oto kolejny rekurencyjne przykład - http://www.java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html
To właśnie szybko napisał dla siebie:
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);
}
}
}
Aby go użyć, Użyłem coś takiego:
var doc = new XmlDocument();
doc.Load(somePath);
doc.IterateThroughAllNodes(
delegate(XmlNode node)
{
// ...Do something with the node...
});
Może to pomaga kogoś tam.
To jest świetne! Nauczyłem się tony, przechodząc przez ten kod, dziękując za dzielenie się. – reggaeguitar
Uogólnione podejście. +1 Wolę ten. – Silver
iterację wszystkich elementów
XDocument xdoc = XDocument.Load("input.xml");
foreach (XElement element in xdoc.Descendants())
{
Console.WriteLine(element.Name);
}
preferuję używanie tego przez 'XmlDocument'. Zobacz: http://stackoverflow.com/questions/1542073/xdocument-or-xmldocument (nawet starsze niż to pytanie tutaj) –
- 1. Przeczytaj wszystkie węzły potomne XML każdego konkretnego węzła.
- 2. "zwinąć wszystkie" wszystkie węzły jednym kliknięciem w firefox lub chrome
- 3. OpenMPI: Wszystkie węzły działają jako węzły 0
- 4. Znajdź wszystkie węzły tekstowe
- 5. iterowanie przez PagedListHolder w jsp
- 6. Iterowanie przez obiekt Ember
- 7. Iterowanie przez iskrę RDD
- 8. Usunąć określone węzły w katalogu głównym XML?
- 9. Iterowanie po liniach pliku
- 10. Iterowanie przez N Poziom dzieci
- 11. Iterowanie przez plik JSON PowerShell
- 12. dzielenie przez zero błędu w pliku .xml
- 13. HtmlAgilityPack - uzyskać wszystkie węzły w dokumencie
- 14. Jak wybrać wszystkie węzły główne lub wszystkie węzły potomne w VirtualStringTree?
- 15. Zaznacz węzły Linq do XML C#
- 16. Iterowanie przez zakres intów w ksh?
- 17. Iterowanie przez obiekt JSON w C#
- 18. Iterowanie przez JSON w ramach sukcesu $ .ajax
- 19. XSLT Wybierz wszystkie węzły zawierające określony podłańcuch
- 20. Jak wybrać węzły XML z obszarami nazw XML z XmlDocument?
- 21. neo4j znajdź wszystkie węzły o pasujących właściwościach
- 22. Iterowanie przez szeroki wiersz Cassandry z CQL3
- 23. Jak mogę automatycznie wcięte węzły XML z XML :: LibXML?
- 24. Iterowanie przez tabelę Lua z C++?
- 25. Minimalne cięcie przez wierzchołki/węzły - bez krawędzi
- 26. xml węzły edytowanie na podstawie XMLELEMENT
- 27. Nazwa polecenia dla Zwiń wszystko, Rozwiń wszystkie węzły w edytorze XML
- 28. Znajdź wszystkie węzły tekstowe na stronie HTML
- 29. Jak uzyskać wszystkie węzły liści drzewa?
- 30. Przyspieszenie rozwiń/zwiń wszystkie węzły JTree
wolą to dlatego, że traktuje start/końcowe elementy i treści w jednej pozycji, w porównaniu z użyciem XmlReader – Savage