Partager via


Insérer des données XML à l’aide de XPathNavigator

La XPathNavigator classe fournit un ensemble de méthodes utilisées pour insérer des nœuds frères, enfants et attributs dans un document XML. Pour utiliser ces méthodes, l’objet XPathNavigator doit être modifiable, autrement dit, sa CanEdit propriété doit être true.

XPathNavigator les objets qui peuvent modifier un document XML sont créés par la CreateNavigator méthode de la XmlDocument classe. XPathNavigator les objets créés par la XPathDocument classe sont en lecture seule et toute tentative d’utilisation des méthodes d’édition d’un XPathNavigator objet créé par un XPathDocument objet entraîne un NotSupportedException.

Pour plus d’informations sur la création d’objets modifiables XPathNavigator , consultez Lecture de données XML à l’aide de XPathDocument et xmlDocument.

Insertion de nœuds

La XPathNavigator classe fournit des méthodes pour insérer des nœuds frères, enfants et attributs dans un document XML. Ces méthodes vous permettent d’insérer des nœuds et des attributs à différents emplacements par rapport à la position actuelle d’un XPathNavigator objet et sont décrites dans les sections suivantes.

Insertion de nœuds frères

La XPathNavigator classe fournit les méthodes suivantes pour insérer des nœuds frères.

Ces méthodes insèrent des nœuds frères avant et après le nœud sur lequel un XPathNavigator objet est actuellement positionné.

Les méthodes InsertAfter et InsertBefore sont surchargées et acceptent un string, XmlReader ou XPathNavigator objet contenant le nœud frère à ajouter comme paramètres. Les deux méthodes retournent également un XmlWriter objet utilisé pour insérer des nœuds frères.

Les méthodes InsertElementAfter et InsertElementBefore insèrent un nœud adjacent unique avant et après le nœud sur lequel un objet XPathNavigator est positionné, en utilisant le préfixe d’espace de noms, le nom local, l’URI de l’espace de noms et la valeur spécifiés comme paramètres.

Dans l’exemple suivant, un nouvel pages élément est inséré avant l’élément price enfant du premier book élément du contosoBooks.xml fichier.

XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("price", "http://www.contoso.com/books");

navigator.InsertBefore("<pages>100</pages>");

navigator.MoveToParent();
Console.WriteLine(navigator.OuterXml);
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("price", "http://www.contoso.com/books")

navigator.InsertBefore("<pages>100</pages>")

navigator.MoveToParent()
Console.WriteLine(navigator.OuterXml)

L’exemple prend le contosoBooks.xml fichier en tant qu’entrée.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <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>

Pour plus d’informations sur les méthodes InsertAfter, InsertBefore, InsertElementAfter et InsertElementBefore, consultez la documentation de référence de la classe XPathNavigator.

Insertion de nœuds enfants

La XPathNavigator classe fournit les méthodes suivantes pour insérer des éléments enfants.

Ces méthodes ajoutent les nœuds enfants à la fin et au début de la liste des nœuds enfants du nœud sur lequel la position de l'objet XPathNavigator est actuellement.

Comme les méthodes de la section « Insertion de nœuds frères », les AppendChildPrependChild méthodes acceptent un stringobjet ou XmlReaderXPathNavigator un objet contenant le nœud enfant à ajouter en tant que paramètres. Les deux méthodes retournent également un objet XmlWriter utilisé pour insérer des nœuds enfants.

À l’instar des méthodes de la section « Insertion de nœuds frères », les AppendChildElement et PrependChildElement méthodes insèrent un nœud enfant unique à la fin de et au début de la liste des nœuds enfants du nœud lorsque l'objet XPathNavigator est positionné dessus, en utilisant le préfixe d’espace de noms, le nom local, l’URI de l’espace de noms et la valeur spécifiés en tant que paramètres.

Dans l’exemple suivant, un nouvel pages élément enfant est ajouté à la liste des éléments enfants du premier book élément du contosoBooks.xml fichier.

XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");

navigator.AppendChild("<pages>100</pages>");

Console.WriteLine(navigator.OuterXml);
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")

navigator.AppendChild("<pages>100</pages>")

Console.WriteLine(navigator.OuterXml)

L’exemple prend le contosoBooks.xml fichier en tant qu’entrée.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <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>

Pour plus d’informations sur les méthodes AppendChild, PrependChild, AppendChildElement et PrependChildElement, consultez la documentation de référence de la classe XPathNavigator.

Insertion de nœuds d’attribut

La XPathNavigator classe fournit les méthodes suivantes pour insérer des nœuds d’attribut.

Ces méthodes insèrent des nœuds d’attribut sur le nœud d’élément sur lequel un XPathNavigator objet est actuellement positionné. La CreateAttribute méthode crée un nœud d’attribut sur le nœud d’élément sur lequel un XPathNavigator objet est actuellement positionné à l’aide du préfixe d’espace de noms, du nom local, de l’URI de l’espace de noms et de la valeur spécifiée en tant que paramètres. La CreateAttributes méthode retourne un XmlWriter objet utilisé pour insérer des nœuds d’attribut.

Dans l’exemple suivant, de nouveaux attributs discount sont créés currency sur l’élément enfant price du premier élément book dans le fichier contosoBooks.xml à l’aide de l’objet XmlWriter renvoyé par la méthode CreateAttributes.

XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("price", "http://www.contoso.com/books");

XmlWriter attributes = navigator.CreateAttributes();

attributes.WriteAttributeString("discount", "1.00");
attributes.WriteAttributeString("currency", "USD");
attributes.Close();

navigator.MoveToParent();
Console.WriteLine(navigator.OuterXml);
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("price", "http://www.contoso.com/books")

Dim attributes As XmlWriter = navigator.CreateAttributes()

attributes.WriteAttributeString("discount", "1.00")
attributes.WriteAttributeString("currency", "USD")
attributes.Close()

navigator.MoveToParent()
Console.WriteLine(navigator.OuterXml)

L’exemple prend le contosoBooks.xml fichier en tant qu’entrée.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <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>

Pour plus d’informations sur les méthodes CreateAttribute et CreateAttributes, consultez la documentation de référence de la classe XPathNavigator.

Copier des nœuds

Dans certains cas, vous pouvez remplir un document XML avec le contenu d’un autre document XML. La XPathNavigator classe et la XmlWriter classe peuvent copier des nœuds vers un objet XmlDocument à partir d’un objet existant XmlReader ou XPathNavigator.

Les méthodes AppendChild, PrependChild, InsertBefore et InsertAfter de la classe XPathNavigator ont toutes des surcharges pouvant accepter un objet XPathNavigator ou un objet XmlReader en tant que paramètre.

La méthode WriteNode de la classe XmlWriter a des surcharges qui peuvent accepter un XmlNode, XmlReader ou un objet XPathNavigator.

L’exemple suivant copie tous les book éléments d’un document vers un autre.

Dim document As XmlDocument = New XmlDocument()
document.Load("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", String.Empty)

Dim newBooks As XPathDocument = New XPathDocument("newBooks.xml")
Dim newBooksNavigator As XPathNavigator = newBooks.CreateNavigator()

Dim nav As XPathNavigator
For Each nav in newBooksNavigator.SelectDescendants("book", "", false)
    navigator.AppendChild(nav)
Next

document.Save("newBooks.xml");
XmlDocument document = new XmlDocument();
document.Load("books.xml");
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", String.Empty);

XPathDocument newBooks = new XPathDocument("newBooks.xml");
XPathNavigator newBooksNavigator = newBooks.CreateNavigator();

foreach (XPathNavigator nav in newBooksNavigator.SelectDescendants("book", "", false))
{
    navigator.AppendChild(nav);
}

document.Save("newBooks.xml");

Insertion de valeurs

La classe XPathNavigator fournit les méthodes SetValue et SetTypedValue pour insérer des valeurs pour un nœud dans un objet XmlDocument.

Insertion de valeurs non typées

La SetValue méthode insère simplement la valeur non typée string passée en tant que paramètre comme valeur du nœud sur lequel l’objet XPathNavigator est actuellement positionné. La valeur est insérée sans type ou sans vérifier que la nouvelle valeur est valide en fonction du type du nœud si des informations de schéma sont disponibles.

Dans l’exemple suivant, la SetValue méthode est utilisée pour mettre à jour tous les price éléments du contosoBooks.xml fichier.

XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
XPathNavigator navigator = document.CreateNavigator();

XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("bk", "http://www.contoso.com/books");

foreach (XPathNavigator nav in navigator.Select("//bk:price", manager))
{
    if (nav.Value == "11.99")
    {
        nav.SetValue("12.99");
    }
}

Console.WriteLine(navigator.OuterXml);
Dim document As XmlDocument = New XmlDocument()
document.Load("contosoBooks.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()

Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
manager.AddNamespace("bk", "http://www.contoso.com/books")

For Each nav As XPathNavigator In navigator.Select("//bk:price", manager)
    If nav.Value = "11.99" Then
        nav.SetValue("12.99")
    End If
Next

Console.WriteLine(navigator.OuterXml)

L’exemple prend le contosoBooks.xml fichier en tant qu’entrée.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <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>

Insertion de valeurs typées

Lorsque le type d’un nœud est un type simple de schéma XML W3C, la nouvelle valeur insérée par la SetTypedValue méthode est vérifiée par rapport aux facettes du type simple avant la définition de la valeur. Si la nouvelle valeur n’est pas valide en fonction du type du nœud (par exemple, la définition d’une valeur -1 sur un élément dont le type est xs:positiveInteger), elle génère une exception.

L'exemple suivant tente de modifier la valeur de l’élément price du premier élément book dans le fichier contosoBooks.xml en une valeur DateTime. Étant donné que le type de schéma XML de l’élément price est défini comme xs:decimal dans les contosoBooks.xsd fichiers, cela entraîne une exception.

Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
settings.ValidationType = ValidationType.Schema

Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)

Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()

navigator.MoveToChild("bookstore", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("price", "http://www.contoso.com/books")

navigator.SetTypedValue(DateTime.Now)
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
settings.ValidationType = ValidationType.Schema;

XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);

XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToChild("bookstore", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("price", "http://www.contoso.com/books");

navigator.SetTypedValue(DateTime.Now);

L’exemple prend le contosoBooks.xml fichier en tant qu’entrée.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <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>

L’exemple considère également contosoBooks.xsd comme entrée.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:date" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Propriétés InnerXml et OuterXml

Les propriétés InnerXml et OuterXml de la classe XPathNavigator modifient le balisage XML des nœuds sur lesquels un objet XPathNavigator est actuellement positionné.

La propriété InnerXml modifie, avec le contenu extrait du XML XPathNavigator donné, le balisage XML des nœuds enfants sur lesquels se trouve actuellement un objet string. De même, la OuterXml propriété modifie le balisage XML des nœuds enfants sur lesquels un XPathNavigator objet est actuellement positionné ainsi que le nœud actuel lui-même.

Outre les méthodes décrites dans cette rubrique, les propriétés InnerXml et OuterXml peuvent être utilisées pour insérer des nœuds et des valeurs dans un document XML. Pour plus d’informations sur l’utilisation des propriétés InnerXml et OuterXml pour insérer des nœuds et des valeurs, consultez la rubrique Modifier des données XML à l’aide de XPathNavigator.

Conflits d'espaces de noms et xml:lang

Certains conflits liés à l'étendue de l'espace de noms et des déclarations xml:lang peuvent se produire lors de l'insertion de données XML à l'aide des méthodes InsertBefore, InsertAfter, AppendChild, et PrependChild de la classe XPathNavigator qui prennent des objets XmlReader en tant que paramètres.

Voici les conflits d’espaces de noms possibles.

  • S'il existe un espace de noms dans le contexte de l'objet XmlReader, où la correspondance du préfixe à l'URI de l'espace de noms n'est pas présente dans le contexte de l'objet XPathNavigator, une nouvelle déclaration d'espace de noms est ajoutée au nœud récemment inséré.

  • Si le même URI d’espace de noms est dans l’étendue du contexte de l’objet XmlReader et dans le contexte de l’objet XPathNavigator, mais a un préfixe différent mappé dans les deux contextes, une nouvelle déclaration d’espace de noms est ajoutée au nœud nouvellement inséré, avec le préfixe et l’URI d’espace de noms extraits de l’objet XmlReader.

  • Si le même préfixe d’espace de noms est applicable à la fois dans le contexte de l'objet XmlReader et dans le contexte de l'objet XPathNavigator, mais a un URI d’espace de noms différent mappé dans les deux contextes, une nouvelle déclaration d’espace de noms est ajoutée au nœud nouvellement inséré qui re-déclare ce préfixe avec l’URI d’espace de noms extrait de l'objet XmlReader.

  • Si le préfixe et l’URI de l’espace de noms dans le contexte de l’objet XmlReader et le contexte de l’objet XPathNavigator sont identiques, aucune nouvelle déclaration d’espace de noms n’est ajoutée au nœud nouvellement inséré.

Remarque

La description ci-dessus s’applique également aux déclarations d’espace de noms avec le préfixe vide string (par exemple, la déclaration d’espace de noms par défaut).

Voici les conflits possibles xml:lang .

  • Si un attribut est présent dans l'étendue du contexte de l'objet xml:lang, mais pas dans le contexte de l'objet XmlReader, un attribut XPathNavigator dont la valeur est extraite de l'objet xml:lang est ajouté au nœud nouvellement inséré.

  • S'il existe un attribut xml:lang dans l'étendue à la fois dans le contexte de l'objet XmlReader et dans le contexte de l'objet XPathNavigator, mais que chacun a une valeur différente, un attribut xml:lang dont la valeur est extraite de l'objet XmlReader est ajouté au nœud récemment inséré.

  • S’il existe un xml:lang attribut dans la portée à la fois dans le contexte de l’objet XmlReader et dans le contexte de l’objet XPathNavigator, mais ayant chacun la même valeur, aucun nouvel xml:lang attribut n’est ajouté au nœud nouvellement inséré.

  • S'il existe un attribut xml:lang dans le contexte de l'objet XPathNavigator, mais qu'aucun attribut similaire n'existe dans le contexte de l'objet XmlReader, aucun attribut xml:lang n'est ajouté au nœud nouvellement inséré.

Insertion de nœuds avec XmlWriter

Les méthodes utilisées pour insérer des nœuds frères, enfants et attributs décrits dans la section « Insertion de nœuds et de valeurs » sont surchargées. Les méthodes InsertAfter, InsertBefore, AppendChild, PrependChild et CreateAttributes de la classe XPathNavigator retournent un objet XmlWriter utilisé pour insérer des nœuds.

Méthodes XmlWriter non prises en charge

Toutes les méthodes utilisées pour écrire des informations dans un document XML à l’aide de la classe ne sont pas prises en charge par la XmlWriterXPathNavigator classe en raison de la différence entre le modèle de données XPath et le modèle DOM (Document Object Model).

Le tableau suivant décrit les méthodes de XmlWriter classe non prises en charge par la XPathNavigator classe.

Méthode Descriptif
WriteEntityRef Lève une NotSupportedException exception.
WriteDocType Ignoré au niveau racine et génère une NotSupportedException exception si cette action est appelée à un autre niveau dans le document XML.
WriteCData Traité comme un appel à la WriteString méthode pour le caractère ou les caractères équivalents.
WriteCharEntity Traité comme un appel à la WriteString méthode pour le caractère ou les caractères équivalents.
WriteSurrogateCharEntity Traité comme un appel à la WriteString méthode pour le caractère ou les caractères équivalents.

Pour plus d’informations sur la classe XmlWriter, consultez la documentation de référence de la classe XmlWriter.

Plusieurs objets XmlWriter

Il est possible d’avoir plusieurs XPathNavigator objets pointant vers différentes parties d’un document XML avec un ou plusieurs objets ouverts XmlWriter . Plusieurs XmlWriter objets sont autorisés et pris en charge dans les scénarios à thread unique.

Les remarques suivantes sont importantes à prendre en compte lors de l’utilisation de plusieurs XmlWriter objets.

  • Les fragments XML écrits par les objets XmlWriter sont ajoutés au document XML lorsque la méthode de chaque objet Close est appelée. Jusqu’à ce stade, l’objet XmlWriter écrit un fragment déconnecté. Si une opération est effectuée sur le document XML, tous les fragments écrits par un XmlWriter objet, avant l’appel Close , ne sont pas affectés.

  • S’il existe un objet ouvert XmlWriter sur une sous-arborescence XML particulière et que cette sous-arborescence est supprimée, l’objet XmlWriter peut toujours être ajouté à l’arborescence secondaire. La sous-arborescence devient simplement un fragment supprimé.

  • Si plusieurs XmlWriter objets sont ouverts au même point dans le document XML, ils sont ajoutés au document XML dans l’ordre dans lequel les XmlWriter objets sont fermés, et non dans l’ordre dans lequel ils ont été ouverts.

L’exemple suivant crée un XmlDocument objet, crée un XPathNavigator objet, puis utilise l’objet XmlWriter retourné par la PrependChild méthode pour créer la structure du premier livre dans le books.xml fichier. L’exemple l’enregistre ensuite en tant que book.xml fichier.

Dim document As XmlDocument = New XmlDocument()
Dim navigator As XPathNavigator = document.CreateNavigator()

Using writer As XmlWriter = navigator.PrependChild()

    writer.WriteStartElement("bookstore")
    writer.WriteStartElement("book")
    writer.WriteAttributeString("genre", "autobiography")
    writer.WriteAttributeString("publicationdate", "1981-03-22")
    writer.WriteAttributeString("ISBN", "1-861003-11-0")
    writer.WriteElementString("title", "The Autobiography of Benjamin Franklin")
    writer.WriteStartElement("author")
    writer.WriteElementString("first-name", "Benjamin")
    writer.WriteElementString("last-name", "Franklin")
    writer.WriteElementString("price", "8.99")
    writer.WriteEndElement()
    writer.WriteEndElement()
    writer.WriteEndElement()

End Using

document.Save("book.xml")
XmlDocument document = new XmlDocument();
XPathNavigator navigator = document.CreateNavigator();

using (XmlWriter writer = navigator.PrependChild())
{
    writer.WriteStartElement("bookstore");
    writer.WriteStartElement("book");
    writer.WriteAttributeString("genre", "autobiography");
    writer.WriteAttributeString("publicationdate", "1981-03-22");
    writer.WriteAttributeString("ISBN", "1-861003-11-0");
    writer.WriteElementString("title", "The Autobiography of Benjamin Franklin");
    writer.WriteStartElement("author");
    writer.WriteElementString("first-name", "Benjamin");
    writer.WriteElementString("last-name", "Franklin");
    writer.WriteElementString("price", "8.99");
    writer.WriteEndElement();
    writer.WriteEndElement();
    writer.WriteEndElement();
}
document.Save("book.xml");

Enregistrement d’un document XML

L’enregistrement des modifications apportées à un XmlDocument objet en raison des méthodes décrites dans cette rubrique est effectuée à l’aide des méthodes de la XmlDocument classe. Pour plus d’informations sur l’enregistrement des modifications apportées à un XmlDocument objet, consultez Enregistrement et écriture d’un document.

Voir aussi