Condividi tramite


Estrarre dati XML tramite XPathNavigator

Esistono diversi modi per rappresentare un documento XML in Microsoft .NET Framework. Ciò include l'uso di un String, o attraverso l'uso delle classi XmlReader, XmlWriter, XmlDocument, o XPathDocument. Per facilitare lo spostamento tra queste diverse rappresentazioni di un documento XML, la XPathNavigator classe fornisce una serie di metodi e proprietà per estrarre il codice XML come Stringoggetto , XmlReader o XmlWriter oggetto .

Convertire un XPathNavigator in una stringa

La OuterXml proprietà della XPathNavigator classe viene utilizzata per ottenere il markup dell'intero documento XML o solo il markup di un singolo nodo e dei relativi nodi figlio.

Annotazioni

La InnerXml proprietà ottiene il markup solo dei nodi figlio di un nodo.

Nell'esempio di codice seguente viene illustrato come salvare un intero documento XML contenuto in un XPathNavigator oggetto come String, nonché un singolo nodo e i relativi nodi figlio.

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;  

Convertire un XPathNavigator in un XmlReader

Il ReadSubtree metodo viene usato per trasmettere l'intero contenuto di un documento XML o solo un singolo nodo e i relativi nodi figlio a un XmlReader oggetto .

Quando l'oggetto XmlReader viene creato con il nodo corrente e i relativi nodi figlio, la XmlReader proprietà dell'oggetto ReadState viene impostata su Initial. Quando il XmlReader metodo dell'oggetto Read viene chiamato per la prima volta, l'oggetto XmlReader viene spostato nel nodo corrente dell'oggetto XPathNavigator. Il nuovo XmlReader oggetto continua a leggere finché non viene raggiunta la fine dell'albero XML. A questo punto, il Read metodo restituisce false e la XmlReader proprietà dell'oggetto ReadState è impostata su EndOfFile.

La XPathNavigator posizione dell'oggetto è invariata dalla creazione o dallo spostamento dell'oggetto XmlReader . Il ReadSubtree metodo è valido solo se posizionato in un elemento o in un nodo radice.

Nell'esempio seguente viene illustrato come ottenere un XmlReader oggetto contenente l'intero documento XML in un XPathDocument oggetto, nonché un singolo nodo e i relativi nodi figlio.

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

L'esempio accetta il file books.xml come input.

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

Conversione di un XPathNavigator in xmlWriter

Il WriteSubtree metodo viene usato per trasmettere l'intero contenuto di un documento XML o solo un singolo nodo e i relativi nodi figlio a un XmlWriter oggetto .

La XPathNavigator posizione dell'oggetto è invariata dalla creazione dell'oggetto XmlWriter .

Nell'esempio seguente viene illustrato come ottenere un XmlWriter oggetto contenente l'intero documento XML in un XPathDocument oggetto, nonché un singolo nodo e i relativi nodi figlio.

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

L'esempio accetta il books.xml file trovato in precedenza in questo argomento come input.

Vedere anche