Sdílet prostřednictvím


Extrahování dat XML pomocí XPathNavigator

Existuje několik různých způsobů, jak reprezentovat dokument XML v rozhraní Microsoft .NET Framework. To zahrnuje použití String, nebo pomocí XmlReader, XmlWriter, XmlDocumentnebo XPathDocument třídy. Chcete-li usnadnit přechod mezi těmito různými reprezentacemi dokumentu XML, XPathNavigator třída poskytuje řadu metod a vlastností pro extrakci XML jako objektu StringXmlReader nebo XmlWriter objektu.

Převedení XPathNavigatoru na řetězec

Vlastnost OuterXmlXPathNavigator třídy se používá k získání revize celého dokumentu XML nebo pouze revize jednoho uzlu a jeho podřízených uzlů.

Poznámka:

Vlastnost InnerXml získá kód pouze podřízených uzlů uzlu.

Následující příklad kódu ukazuje, jak uložit celý dokument XML obsažený v objektu XPathNavigator jako , Stringstejně jako jeden uzel a jeho podřízené uzly.

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;  

Převod XPathNavigator na XmlReader

Metoda ReadSubtree se používá k streamování celého obsahu dokumentu XML nebo pouze jednoho uzlu a jeho podřízených uzlů do objektu XmlReader .

Při vytvoření objektu XmlReader s aktuálním uzlem a jeho podřízenými XmlReader uzly je vlastnost objektu ReadState nastavena na Initial. XmlReader Při prvním zavolání metody objektu Read se přesune XmlReader do aktuálního uzlu objektu XPathNavigator. Nový XmlReader objekt bude nadále číst, dokud se nedosáhne konce stromu XML. V tomto okamžiku metoda vrátí false a vlastnost objektu ReadStateXmlReader je nastavena na EndOfFile.Read

Pozice XPathNavigator objektu se nezmění vytvořením nebo pohybem objektu XmlReader . Metoda ReadSubtree je platná pouze při umístění na elementu nebo kořenovém uzlu.

Následující příklad ukazuje, jak získat XmlReader objekt obsahující celý dokument XML v objektu XPathDocument i jeden uzel a jeho podřízené uzly.

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();  

Příklad vezme books.xml soubor jako vstup.

<?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>

Převod XPathNavigator na XmlWriter

Metoda WriteSubtree se používá k streamování celého obsahu dokumentu XML nebo pouze jednoho uzlu a jeho podřízených uzlů do objektu XmlWriter .

Pozice XPathNavigator objektu se nezmění vytvořením objektu XmlWriter .

Následující příklad ukazuje, jak získat XmlWriter objekt obsahující celý dokument XML v objektu XPathDocument i jeden uzel a jeho podřízené uzly.

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();  

Příklad vezme books.xml soubor nalezený dříve v tomto tématu jako vstup.

Viz také