Partager via


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

Mise à jour : November 2007

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.

Remarque :

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 String l'entièreté d'un document XML contenu dans un objet XPathNavigator, 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é ReadState de l'objet XmlReader est définie sur Initial. Lors du premier appel à la méthode Read de l'objet XmlReader, l'objet XmlReader est déplacé vers le nœud actuel de l'objet XPathNavigator. Le nouvel objet XmlReader continue à lire jusqu'à la fin de l'arborescence XML. À ce stade, la méthode Read retourne false et la propriété ReadState de l'objet XmlReader 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.

<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

Concepts

Traitement des données XML à l'aide du modèle de données XPath

Navigation dans la collection de nœuds à l'aide de XPathNavigator

Navigation entre les nœuds d'attribut et d'espace de noms à l'aide de XPathNavigator

Accès à des données XML fortement typées à l'aide de XPathNavigator

Référence

XmlDocument

XPathDocument

XPathNavigator