Per la velocità, utilizzare un XmlReader
:
using (StringReader sr = new StringReader(myString))
using (XmlReader xr = XmlReader.Create(sr))
{
while (xr.Read())
{
if (xr.NodeType == XmlNodeType.Element && xr.Name == "foo")
{
Console.WriteLine(xr.ReadString());
}
}
}
Le stampe precede rispecchia il contenuto del testo di ogni elemento di nome "pippo" nel documento XML. (. Beh, sorta di ReadString
non gestisce elementi annidati molto garbo.)
Utilizzando un XPathDocument
è più lento, perché l'intero documento viene analizzato prima di poter avviare la ricerca di esso, ma ha il pregio della semplicità:
using (StringReader sr = new StringReader(myString))
{
XPathDocument d = new XPathDocument(sr);
foreach (XPathNavigator n in d.CreateNavigator().Select("//foo/text()"))
{
Console.WriteLine(n.Value);
}
}
Se non sei interessati con le prestazioni o l'utilizzo della memoria, è più semplice utilizzare un XmlDocument
:
XmlDocument d = new XmlDocument();
d.LoadXml(myString);
foreach (XmlNode n in d.SelectNodes("//foo/text()"))
{
Console.WriteLine(n.Value);
}
fonte
2009-09-28 21:59:43
Bella risposta con esempi di codice. Come nota a margine, 'XPathNodeIterator' implementa' IEnumerable', quindi non c'è bisogno di usare 'while' -' foreach' farà anche il trucco, ed è più facile da leggere. –
Giusto sei; Ho modificato l'esempio per dimostrarlo. –