For speed use 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()); } } }
The above displays the text content of each element named "foo" in the XML document. (Well, sort of. ReadString doesn't handle nested elements very well.)
Using XPathDocument is slower because the whole document is parsed before you can start it, but it has the virtue of simplicity:
using (StringReader sr = new StringReader(myString)) { XPathDocument d = new XPathDocument(sr); foreach (XPathNavigator n in d.CreateNavigator().Select("//foo/text()")) { Console.WriteLine(n.Value); } }
If you are not interested in performance or memory usage, try using XmlDocument :
XmlDocument d = new XmlDocument(); d.LoadXml(myString); foreach (XmlNode n in d.SelectNodes("//foo/text()")) { Console.WriteLine(n.Value); }
Robert rossney
source share