Voglio ripetere tutti i nodi in un file XML e stampare i loro nomi. Qual è il modo migliore per farlo? Sto usando .NET 2.0.Iterazione di tutti i nodi nel file XML
risposta
penso il modo più semplice e veloce sarebbe quello di usare uno XmlReader, questo non richiede qualsiasi ricorsione e minima impronta di memoria.
Ecco un semplice esempio, per la compattezza ho solo usato una semplice stringa, naturalmente, è possibile utilizzare un flusso da un file ecc
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);
}
}
Il risultato di quanto sopra sarà
parent
child
nested
child
other
Un elenco di tutti gli elementi nel documento XML.
È possibile utilizzare XmlDocument. Anche alcuni XPath possono essere utili.
Basta un semplice esempio
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
}
Un algoritmo ricorsivo che analizza attraverso un XmlDocument
Ecco un esempio - Recursively reading an xml document and using regex to get contents
Ecco un altro esempio ricorsivo - http://www.java2s.com/Tutorial/CSharp/0540__XML/LoopThroughXmlDocumentRecursively.html
Questo è ciò che ho scritto in fretta per me: qualcosa
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);
}
}
}
Per usarlo, ho usato come:
var doc = new XmlDocument();
doc.Load(somePath);
doc.IterateThroughAllNodes(
delegate(XmlNode node)
{
// ...Do something with the node...
});
Forse aiuta qualcuno là fuori.
Questo è grande! Ho imparato un sacco passando questo codice, grazie per la condivisione. – reggaeguitar
Approccio generalizzato. +1 Preferisco questo. – Silver
per scorrere tutti gli elementi
XDocument xdoc = XDocument.Load("input.xml");
foreach (XElement element in xdoc.Descendants())
{
Console.WriteLine(element.Name);
}
preferisci usare questo sopra 'XmlDocument'. Vedi: http://stackoverflow.com/questions/1542073/xdocument-or-xmldocument (anche più vecchio di questa domanda qui) –
- 1. Leggere tutti i nodi figlio XML di ciascun nodo specifico
- 2. Abap - Attraversando tutti i nodi di un documento xml?
- 3. NSOutlineView - Espansione automatica di tutti i nodi
- 4. Tutti i percorsi tra 2 nodi nel grafico
- 5. Esporta file XML nidificato dall'accesso. bisogno di file XML con i nodi
- 6. Iterazione di tutti i percorsi di Play Framework in Test
- 7. JTree: selezione programmata di tutti i nodi
- 8. Come selezionare tutti i nodi figlio tranne i nodi di testo?
- 9. mongo DB - Tutti i nodi secondari
- 10. Mostra tutti i nodi e le relazioni
- 11. Iterazione gerarchia dei nodi - Visitatore e Composito?
- 12. Descrivere i nodi XML ripetuti nello schema XML W3C?
- 13. Percorso non ciclico a tutti i nodi
- 14. C#, XML, aggiunta di nuovi nodi
- 15. Utilizzare SQL Server per ottenere tutti i dati dai nodi XML denominati uguali
- 16. XPATH - Seleziona tutti i nodi figlio con un attributo specifico
- 17. XSLT Copiare tutti i nodi tranne 1 elemento
- 18. Cerca file XML per i nodi con specifico valore di attributo in .NET 2
- 19. Rimozione dei nodi da XML
- 20. XSLT Seleziona tutti i nodi contenenti una sottostringa specifica
- 21. Come cancellare un modello JTree? (Rimozione di tutti i nodi)
- 22. Come ottenere tutti i nodi foglia di un albero?
- 23. Trova tutti i nodi di testo nella pagina HTML
- 24. HtmlAgilityPack - ottenere tutti i nodi di un documento
- 25. Come espandere tutti i nodi di una vista ad albero WPF nel codice sottostante?
- 26. Restituisce tutti i nodi nel percorso più breve come elenco di oggetti
- 27. Jenkins: esiste un modo per rimuovere tutti i nodi non in linea (slave)/eliminare i nodi in batch/eliminare tutti i nodi?
- 28. Ottenere un elenco di tutti i nodi dell'albero (in tutti i livelli) in TreeView Controls
- 29. Gatling: significato di tutti i campi nel file simulation.log
- 30. MSBUILD Genera file di documentazione xml per tutti i progetti in soluzione (senza toccare i progetti)
preferiscono questo perché tratta gli elementi/inizio fine e il contenuto come un singolo elemento, rispetto all'utilizzo di XmlReader – Savage