Para la velocidad, use 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());
}
}
}
Las impresiones anteriores fuera el contenido del texto de cada elemento llamado "foo" en el documento XML. (. Bueno, más o menos ReadString
no maneja elementos anidados con mucha gracia.)
El uso de un XPathDocument
es más lento, porque todo el documento se analiza antes de poder iniciar la búsqueda, pero tiene el mérito de la simplicidad:
using (StringReader sr = new StringReader(myString))
{
XPathDocument d = new XPathDocument(sr);
foreach (XPathNavigator n in d.CreateNavigator().Select("//foo/text()"))
{
Console.WriteLine(n.Value);
}
}
Si usted no está preocupado con el rendimiento o utilización de la memoria, que es más sencilla de usar un XmlDocument
:
XmlDocument d = new XmlDocument();
d.LoadXml(myString);
foreach (XmlNode n in d.SelectNodes("//foo/text()"))
{
Console.WriteLine(n.Value);
}
Buena respuesta con muestras de código. Como nota al margen, 'XPathNodeIterator' implementa' IEnumerable', por lo que no es necesario usar 'while' -' foreach' hará el truco también, y es más fácil de leer. –
Tienes razón; Edité el ejemplo para mostrar eso. –