Navigating a Non-XML Document with XPath
One of the most
interesting and unique aspects of .NET’s XML
implementation is the fact that you can read non-XML data as if it
were XML by creating subclasses of its abstract types. You saw this
already in XmlReader
and
XmlWriter
.
Because
you can read an XmlDocument
from any
XmlReader
, it follows that you can call that
XmlDocument
’s
SelectSingleNode( )
and CreateNavigator(
)
methods to navigate the document via XPath. You can also
create an XPathDocument
from any
XmlReader
, and use its CreateNavigator(
)
method. In addition to that, however, you can also create
a custom implementation of XPathNavigator
to
navigate any source document with XPath.
Using a custom XmlReader
You’ve already
created and used XmlPyxReader
in Chapter 4. Since XmlPyxReader
is just
like any other instance of XmlReader
, you can pass
it to XPathDocument
’s constructor
and navigate it using XPath:
XmlReader reader = new XmlPyxReader(filename); XPathDocument document = new XPathDocument(reader); XPathNavigator navigator = document.CreateNavigator( ); XPathNodeIterator iterator = navigator.Select(xpathExpression); Console.WriteLine("{0} nodes matched.", iterator.Count); while (iterator.MoveNext( )) { Console.WriteLine(iterator.Current.LocalName); } writer.Close( );
Using a custom XPathNavigator
The
next possibility is to skip over the custom
XmlReader
and go directly to a custom
XPathNavigator
. Like custom
XmlReader
s, custom
XPathNavigator
s have numerous methods ...
Get .NET & XML now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.