I know what you’re thinking.. what if I wanted to only READ an XML document in .NET and have the luxury and ease of use of the DOM model but not the overhead of loading it all into memory. Well here’s your solution.
What this snippet does is reads an XML document using an XPathNavigator. It will use the DOM model without the overhead of loading the whole document into memory.
This snippet returns the full element values in between elements. For example:
root element
code element
This is a test.
/code element
/root element
GetXmlString(“/root/code”); //returns ‘This is a test.’
Enjoy.
using System.Xml;
using System.Xml.XPath;
private string m_xml_path;
private string m_xml_filename;
public string FilePath
{
get { return m_xml_path; }
set { m_xml_path = value; }
}
public string FileName
{
get { return m_xml_filename; }
set { m_xml_filename = value; }
}
private XPathNavigator CreateNavigator(string path, string filename)
{
XPathDocument doc = new XPathDocument(path + filename);
return doc.CreateNavigator();
}
public string GetXMLString(string xpath)
{
string xmlString = null;
try
{
XPathNavigator nav = CreateNavigator(m_xml_path, m_xml_filename);
XPathNodeIterator iter = nav.Select(xpath);
iter.MoveNext();
xmlString = iter.Current.Value;
iter = null;
nav = null;
}
catch (XPathException xe)
{
throw new XPathException(xe.Message);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return xmlString;
}