XML-gegevens extraheren met XPathNavigator
Er zijn verschillende manieren om een XML-document weer te geven in Microsoft .NET Framework. Dit omvat het gebruik van een String, of met behulp van de XmlReaderXmlWriter, of XmlDocumentXPathDocument klassen. Om het verplaatsen tussen deze verschillende weergaven van een XML-document te vergemakkelijken, biedt de XPathNavigator klasse een aantal methoden en eigenschappen voor het extraheren van de XML als een String, XmlReader object of XmlWriter object.
Een XPathNavigator converteren naar een tekenreeks
De OuterXml eigenschap van de XPathNavigator klasse wordt gebruikt om de markering van het hele XML-document op te halen of alleen de markering van één knooppunt en de onderliggende knooppunten.
Notitie
Met InnerXml de eigenschap worden alleen de onderliggende knooppunten van een knooppunt opgehaald.
In het volgende codevoorbeeld ziet u hoe u een volledig XML-document in een XPathNavigator object opslaat als een String, evenals één knooppunt en de onderliggende knooppunten.
Dim document As XPathDocument = New XPathDocument("input.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
' Save the entire input.xml document to a string.
Dim xml As String = navigator.OuterXml
' Now save the Root element and its child nodes to a string.
navigator.MoveToChild(XPathNodeType.Element)
Dim root As String = navigator.OuterXml
XPathDocument document = new XPathDocument("input.xml");
XPathNavigator navigator = document.CreateNavigator();
// Save the entire input.xml document to a string.
string xml = navigator.OuterXml;
// Now save the Root element and its child nodes to a string.
navigator.MoveToChild(XPathNodeType.Element);
string root = navigator.OuterXml;
Een XPathNavigator converteren naar een XmlReader
De ReadSubtree methode wordt gebruikt om de volledige inhoud van een XML-document of slechts één knooppunt en de onderliggende knooppunten naar een XmlReader object te streamen.
Wanneer het XmlReader object wordt gemaakt met het huidige knooppunt en de onderliggende knooppunten, wordt de eigenschap van ReadState het XmlReader object ingesteld op Initial. Wanneer de methode van Read het object voor het XmlReader eerst wordt aangeroepen, wordt deze XmlReader verplaatst naar het huidige knooppunt van de XPathNavigator. Het nieuwe XmlReader object blijft lezen totdat het einde van de XML-structuur is bereikt. Op dit moment wordt de Read methode geretourneerd false
en wordt de eigenschap van ReadState het XmlReader object ingesteld op EndOfFile.
De XPathNavigator positie van het object wordt ongewijzigd door het maken of verplaatsen van het XmlReader object. De ReadSubtree methode is alleen geldig wanneer deze op een element of hoofdknooppunt wordt weergegeven.
In het volgende voorbeeld ziet u hoe u een XmlReader object met het hele XML-document in een XPathDocument object opneemt, evenals één knooppunt en de onderliggende knooppunten.
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
' Stream the entire XML document to the XmlReader.
Dim xml As XmlReader = navigator.ReadSubtree()
While xml.Read()
Console.WriteLine(xml.ReadInnerXml())
End While
xml.Close()
' Stream the book element and its child nodes to the XmlReader.
navigator.MoveToChild("bookstore", "")
navigator.MoveToChild("book", "")
Dim book As XmlReader = navigator.ReadSubtree()
While book.Read()
Console.WriteLine(book.ReadInnerXml())
End While
book.Close()
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
// Stream the entire XML document to the XmlReader.
XmlReader xml = navigator.ReadSubtree();
while (xml.Read())
{
Console.WriteLine(xml.ReadInnerXml());
}
xml.Close();
// Stream the book element and its child nodes to the XmlReader.
navigator.MoveToChild("bookstore", "");
navigator.MoveToChild("book", "");
XmlReader book = navigator.ReadSubtree();
while (book.Read())
{
Console.WriteLine(book.ReadInnerXml());
}
book.Close();
In het voorbeeld wordt het books.xml
bestand als invoer gebruikt.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Een XPathNavigator converteren naar een XmlWriter
De WriteSubtree methode wordt gebruikt om de volledige inhoud van een XML-document of slechts één knooppunt en de onderliggende knooppunten naar een XmlWriter object te streamen.
De XPathNavigator positie van het object is ongewijzigd door het maken van het XmlWriter object.
In het volgende voorbeeld ziet u hoe u een XmlWriter object met het hele XML-document in een XPathDocument object opneemt, evenals één knooppunt en de onderliggende knooppunten.
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
' Stream the entire XML document to the XmlWriter.
Dim xml As XmlWriter = XmlWriter.Create("newbooks.xml")
navigator.WriteSubtree(xml)
xml.Close()
' Stream the book element and its child nodes to the XmlWriter.
navigator.MoveToChild("bookstore", "")
navigator.MoveToChild("book", "")
Dim book As XmlWriter = XmlWriter.Create("book.xml")
navigator.WriteSubtree(book)
book.Close()
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
// Stream the entire XML document to the XmlWriter.
XmlWriter xml = XmlWriter.Create("newbooks.xml");
navigator.WriteSubtree(xml);
xml.Close();
// Stream the book element and its child nodes to the XmlWriter.
navigator.MoveToChild("bookstore", "");
navigator.MoveToChild("book", "");
XmlWriter book = XmlWriter.Create("book.xml");
navigator.WriteSubtree(book);
book.Close();
In het voorbeeld wordt het books.xml
bestand dat eerder in dit onderwerp is gevonden als invoer gebruikt.