Partager via


Extraction de données XML à l’aide de XPathNavigator

Il existe différentes manières de représenter un document XML dans Microsoft .NET Framework. Ce peut être à l'aide d'une chaîne (String) ou des classes XmlReader, XmlWriter, XmlDocument ou XPathDocument. Pour faciliter les déplacements entre ces différentes représentations d'un document XML, la classe XPathNavigator offre diverses méthodes et propriétés d'extraction du XML en tant qu'objet String, XmlReader ou XmlWriter.

Conversion d’un objet XPathNavigator en une chaîne

La propriété OuterXml de la classe XPathNavigator permet d'obtenir le balisage de l'entièreté du document XML ou d'un seul nœud et de ses nœuds enfants.

Notes

La propriété InnerXml n'obtient le balisage que des nœuds enfants d'un nœud.

L'exemple de code suivant montre comment enregistrer en tant qu'objet XPathNavigator l'entièreté d'un document XML contenu dans un objet String, de même qu'un nœud unique et ses nœuds enfants.

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;  

Conversion d’un objet XPathNavigator en un objet XmlReader

La méthode ReadSubtree permet de transmettre l'ensemble du contenu d'un document XML ou un seul nœud et ses nœuds enfants à un objet XmlReader.

Lorsque l'objet XmlReader est créé avec le nœud actuel et ses nœuds enfants, la propriété XmlReader de l'objet ReadState est définie sur Initial. Lorsque la méthode XmlReader de l'objet Read est appelée pour la première fois, le XmlReader est déplacé vers le nœud actuel du XPathNavigator. Le nouvel objet XmlReader poursuit la lecture jusqu’à la fin de l’arborescence XML. À ce stade, la méthode Read retourne false et la propriété XmlReader de l'objet ReadState est définie sur EndOfFile.

La position de l'objet XPathNavigator n'est pas modifiée par la création ou le déplacement de l'objet XmlReader. La méthode ReadSubtree n'est valide que lorsque vous êtes positionné sur un élément ou un nœud racine.

L'exemple suivant montre comment obtenir un objet XmlReader contenant l'entièreté du document XML dans un objet XPathDocument, de même qu'un nœud unique et ses nœuds enfants.

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'exemple prend le fichier books.xml comme entrée.

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

Conversion d’un objet XPathNavigator en un objet XmlWriter

La méthode WriteSubtree permet de transmettre l'ensemble du contenu d'un document XML ou un seul nœud et ses nœuds enfants à un objet XmlWriter.

La position de l'objet XPathNavigator n'est pas modifiée par la création de l'objet XmlWriter.

L'exemple suivant montre comment obtenir un objet XmlWriter contenant l'entièreté du document XML dans un objet XPathDocument, de même qu'un nœud unique et ses nœuds enfants.

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'exemple prend comme entrée le fichier books.xml mentionné précédemment dans cette rubrique.

Voir aussi