Dela via


Extrahera XML-data med XPathNavigator

Det finns flera olika sätt att representera ett XML-dokument i Microsoft .NET Framework. Detta inkluderar att använda en String, eller med hjälp av klasserna XmlReader, XmlWriter, XmlDocumenteller XPathDocument . För att underlätta flyttningen mellan dessa olika representationer av ett XML-dokument XPathNavigator tillhandahåller klassen ett antal metoder och egenskaper för att extrahera XML som ett Stringobjekt XmlReader eller XmlWriter objekt.

Konvertera en XPathNavigator till en sträng

Egenskapen OuterXml för XPathNavigator klassen används för att hämta markering av hela XML-dokumentet eller bara markering av en enskild nod och dess underordnade noder.

Kommentar

Egenskapen InnerXml hämtar markering av bara de underordnade noderna i en nod.

I följande kodexempel visas hur du sparar ett helt XML-dokument i ett XPathNavigator objekt som en String, samt en enskild nod och dess underordnade noder.

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;  

Konvertera en XPathNavigator till en XmlReader

Metoden ReadSubtree används för att strömma hela innehållet i ett XML-dokument eller bara en enskild nod och dess underordnade noder till ett XmlReader objekt.

När objektet XmlReader skapas med den aktuella noden och dess underordnade noder XmlReader är objektets ReadState egenskap inställd på Initial. När objektets XmlReader -metod anropas Read för första gången XmlReader flyttas den till den aktuella noden i XPathNavigator. Det nya XmlReader objektet fortsätter att läsas tills slutet av XML-trädet har nåtts. I det här läget Read returnerar false metoden och XmlReader objektets ReadState egenskap är inställd på EndOfFile.

Objektets XPathNavigator position ändras inte när objektet skapas eller förs XmlReader . Metoden ReadSubtree är endast giltig när den placeras på ett element eller en rotnod.

I följande exempel visas hur du hämtar ett XmlReader objekt som innehåller hela XML-dokumentet i ett XPathDocument objekt samt en enskild nod och dess underordnade noder.

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

Exemplet tar books.xml filen som indata.

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

Konvertera en XPathNavigator till en XmlWriter

Metoden WriteSubtree används för att strömma hela innehållet i ett XML-dokument eller bara en enskild nod och dess underordnade noder till ett XmlWriter objekt.

Objektets XPathNavigator position ändras inte när objektet skapas XmlWriter .

I följande exempel visas hur du hämtar ett XmlWriter objekt som innehåller hela XML-dokumentet i ett XPathDocument objekt samt en enskild nod och dess underordnade noder.

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

Exemplet tar books.xml filen som hittades tidigare i det här avsnittet som indata.

Se även