Compartir a través de


Insertar datos XML mediante XPathNavigator

La XPathNavigator clase proporciona un conjunto de métodos usados para insertar nodos del mismo nivel, secundarios y atributos en un documento XML. Para poder usar estos métodos, el XPathNavigator objeto debe ser editable, es decir, su CanEdit propiedad debe ser true.

XPathNavigator Los objetos que pueden editar un documento XML se crean mediante el CreateNavigator método de la XmlDocument clase . XPathNavigator los objetos creados por la XPathDocument clase son de solo lectura y cualquier intento de usar los métodos de edición de un XPathNavigator objeto creado por un XPathDocument objeto da como resultado un NotSupportedException.

Para obtener más información sobre cómo crear objetos editables XPathNavigator , vea Lectura de datos XML mediante XPathDocument y XmlDocument.

Insertar nodos

La XPathNavigator clase proporciona métodos para insertar nodos del mismo nivel, secundarios y atributos en un documento XML. Estos métodos permiten insertar nodos y atributos en diferentes ubicaciones en relación con la posición actual de un XPathNavigator objeto y se describen en las secciones siguientes.

Inserción de nodos hermanos

La XPathNavigator clase proporciona los métodos siguientes para insertar nodos del mismo nivel.

Estos métodos insertan nodos del mismo nivel antes y después del nodo en el que está colocado un XPathNavigator objeto.

Los métodos InsertAfter y InsertBefore están sobrecargados y aceptan un objeto string, un objeto XmlReader, o un objeto XPathNavigator que contiene el nodo hermano para agregar como parámetros. Ambos métodos también devuelven un XmlWriter objeto usado para insertar nodos del mismo nivel.

Los métodos InsertElementAfter y InsertElementBefore insertan un único nodo hermano antes y después del nodo en el que el objeto XPathNavigator está posicionado actualmente, utilizando el prefijo del espacio de nombres, el nombre local, el URI del espacio de nombres y el valor especificados como parámetros.

En el ejemplo siguiente, se inserta un nuevo elemento pages antes del elemento price secundario del primer elemento book en el archivo contosoBooks.xml.

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)

En el ejemplo se toma el contosoBooks.xml archivo como entrada.

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

Para obtener más información sobre los métodos InsertAfter, InsertBefore, InsertElementAfter y InsertElementBefore, consulte la documentación de referencia de la clase XPathNavigator.

Insertar nodos secundarios

La XPathNavigator clase proporciona los métodos siguientes para insertar nodos secundarios.

Estos métodos anexan y anteponen nodos secundarios al final de y al principio de la lista de nodos secundarios del nodo en el que está colocado un XPathNavigator objeto.

Al igual que los métodos de la sección de "Insertar nodos del mismo nivel", los métodos AppendChild y PrependChild aceptan un objeto string, un objeto XmlReader o un objeto XPathNavigator que contiene el nodo secundario para agregar como parámetros. Ambos métodos también devuelven un XmlWriter objeto usado para insertar nodos secundarios.

Al igual que los métodos de la sección "Inserción de nodos hermanos", los métodos AppendChildElement y PrependChildElement insertan un único nodo hijo al final y al principio de la lista de nodos hijos del nodo en el que un objeto XPathNavigator está actualmente posicionado, utilizando el prefijo del espacio de nombres, el nombre local, el URI del espacio de nombres y el valor especificados como parámetros.

En el ejemplo siguiente, se anexa un nuevo pages elemento secundario a la lista de elementos secundarios del primer book elemento del contosoBooks.xml archivo.

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)

En el ejemplo se toma el contosoBooks.xml archivo como entrada.

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

Para obtener más información sobre los métodos AppendChild, PrependChild, AppendChildElement y PrependChildElement, consulte la documentación de referencia de la clase XPathNavigator.

Insertar nodos de atributo

La XPathNavigator clase proporciona los métodos siguientes para insertar nodos de atributo.

Estos métodos insertan nodos de atributo en el nodo de elemento en el que está colocado un XPathNavigator objeto. El CreateAttribute método crea un nodo de atributo en el nodo de elemento en el que actualmente se posiciona un objeto, utilizando el prefijo del espacio de nombres, el nombre local, el URI del espacio de nombres y el valor especificados como parámetros. El CreateAttributes método devuelve un XmlWriter objeto usado para insertar nodos de atributo.

En el ejemplo siguiente, se crean los nuevos atributos discount y currency en el elemento secundario price del primer elemento book en el archivo contosoBooks.xml mediante el objeto XmlWriter devuelto por el método 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)

En el ejemplo se toma el contosoBooks.xml archivo como entrada.

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

Para obtener más información sobre los CreateAttribute métodos y CreateAttributes , consulte la documentación de referencia de clases XPathNavigator .

Copiar nodos

En determinados casos, puede que desee rellenar un documento XML con el contenido de otro documento XML. Tanto la XPathNavigator clase como la XmlWriter clase pueden copiar nodos en un XmlDocument objeto desde un objeto XmlReader existente o un objeto XPathNavigator.

Los AppendChildmétodos , PrependChildInsertBeforey InsertAfter de la XPathNavigator clase tienen sobrecargas que pueden aceptar un XPathNavigator objeto o un XmlReader objeto como parámetro.

El método WriteNode de la clase XmlWriter tiene sobrecargas que pueden aceptar un objeto XmlNode, XmlReader o XPathNavigator.

En el ejemplo siguiente se copian todos los book elementos de un documento a otro.

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

Insertar valores

La XPathNavigator clase proporciona los SetValue métodos y SetTypedValue para insertar valores para un nodo en un XmlDocument objeto .

Insertar valores sin tipo

El método SetValue simplemente inserta el valor string sin tipo pasado como parámetro como el valor del nodo donde el objeto XPathNavigator está actualmente ubicado. El valor se inserta sin ningún tipo o sin comprobar que el nuevo valor es válido según el tipo del nodo si la información del esquema está disponible.

En el ejemplo siguiente, el SetValue método se usa para actualizar todos los price elementos del contosoBooks.xml archivo.

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)

En el ejemplo se toma el contosoBooks.xml archivo como entrada.

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

Insertar valores tipados

Cuando el tipo de un nodo es un tipo simple de esquema XML W3C, el nuevo valor insertado por el SetTypedValue método se comprueba con las facetas del tipo simple antes de establecer el valor. Si el nuevo valor no es válido según el tipo del nodo (por ejemplo, si se establece un valor de -1 en un elemento cuyo tipo es xs:positiveInteger), se produce una excepción.

En el siguiente ejemplo se intenta cambiar el valor del elemento price del primer elemento book del archivo contosoBooks.xml a un valor DateTime. Dado que el tipo de esquema XML del price elemento se define como xs:decimal en los contosoBooks.xsd archivos, se produce una excepción.

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

En el ejemplo se toma el contosoBooks.xml archivo como entrada.

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

El ejemplo también toma el contosoBooks.xsd como entrada.

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

Propiedades InnerXml y OuterXml

Las propiedades InnerXml y OuterXml de la clase XPathNavigator cambian el marcado XML de los nodos en los que un objeto XPathNavigator está posicionado actualmente.

La InnerXml propiedad cambia el marcado XML de los nodos secundarios en los que está colocado un XPathNavigator objeto con el contenido analizado del XML stringespecificado. De forma similar, la OuterXml propiedad cambia el marcado XML de los nodos secundarios en los que se coloca un XPathNavigator objeto, así como en el propio nodo actual.

Además de los métodos descritos en este tema, las InnerXml propiedades y OuterXml se pueden usar para insertar nodos y valores en un documento XML. Para obtener más información sobre el uso de las InnerXml propiedades y OuterXml para insertar nodos y valores, vea el tema Modificar datos XML mediante XPathNavigator .

Espacio de nombres y conflictos de xml:lang

Se pueden producir ciertos conflictos relacionados con el ámbito del espacio de nombres y las xml:lang declaraciones al insertar datos XML mediante los métodos InsertBefore, InsertAfter, AppendChild y PrependChild de la clase XPathNavigator que toman objetos XmlReader como parámetros.

A continuación se muestran los posibles conflictos de espacios de nombres.

  • Si hay un espacio de nombres dentro del ámbito en el contexto del objeto XmlReader, donde la asignación de prefijo al URI del espacio de nombres no está en el contexto del objeto XPathNavigator, se agrega una nueva declaración de espacio de nombres al nodo recién insertado.

  • Si el mismo URI de espacio de nombres está dentro del ámbito tanto en el contexto del objeto XmlReader como en el contexto del objeto XPathNavigator, pero tiene un prefijo diferente asignado en ambos contextos, se agrega una nueva declaración de espacio de nombres al nodo recién insertado, utilizando el prefijo y el URI del espacio de nombres que se toma del objeto XmlReader.

  • Si el mismo prefijo de espacio de nombres está dentro del ámbito tanto en el XmlReader contexto del objeto como en el XPathNavigator contexto del objeto, pero tiene un URI de espacio de nombres diferente asignado en ambos contextos, se agrega una nueva declaración de espacio de nombres al nodo recién insertado que vuelve a declarar ese prefijo con el URI del espacio de nombres tomado del XmlReader objeto.

  • Si el prefijo, así como el URI del espacio de nombres tanto en el XmlReader contexto del objeto como en el XPathNavigator contexto del objeto es el mismo, no se agrega ninguna declaración de espacio de nombres nuevo al nodo recién insertado.

Nota:

La descripción anterior también se aplica a las declaraciones de espacio de nombres con `string` vacío como prefijo (por ejemplo, la declaración de espacio de nombres predeterminada).

A continuación se muestran los posibles xml:lang conflictos.

  • Si hay un xml:lang atributo dentro del ámbito del objeto XmlReader pero no en el ámbito del objeto XPathNavigator, se agrega un xml:lang atributo cuyo valor se toma del objeto XmlReader al nuevo nodo insertado.

  • Si hay un xml:lang atributo en el ámbito del contexto tanto del objeto XmlReader como del objeto XPathNavigator, pero cada uno tiene un valor diferente, se agrega al nodo recién insertado un xml:lang atributo cuyo valor se toma del objeto XmlReader.

  • Si hay un xml:lang atributo dentro del ámbito tanto en el XmlReader contexto del objeto como en el XPathNavigator contexto del objeto, pero cada uno con el mismo valor, no se agrega ningún atributo nuevo xml:lang en el nodo recién insertado.

  • Si hay un xml:lang atributo dentro del ámbito del objeto XPathNavigator, pero ninguno existente dentro del contexto del objeto XmlReader, no se agrega ningún xml:lang atributo al nodo recién insertado.

Inserción de nodos con XmlWriter

Los métodos usados para insertar nodos relacionados, secundarios y de atributo descritos en la sección "Insertar nodos y valores" están sobrecargados. Los InsertAftermétodos , InsertBefore, AppendChildPrependChild y CreateAttributes de la XPathNavigator clase devuelven un XmlWriter objeto usado para insertar nodos.

Métodos XmlWriter no admitidos

No todos los métodos usados para escribir información en un documento XML mediante la clase son compatibles con la XmlWriterXPathNavigator clase debido a la diferencia entre el modelo de datos XPath y el Modelo de objetos de documento (DOM).

En la tabla siguiente se describen los XmlWriter métodos de clase no admitidos por la XPathNavigator clase .

Método Descripción
WriteEntityRef Lanza una NotSupportedException excepción.
WriteDocType Se omite en el nivel raíz y produce una NotSupportedException excepción si se llama en cualquier otro nivel del documento XML.
WriteCData Tratado como una llamada al método WriteString para el carácter o los caracteres equivalentes.
WriteCharEntity Tratado como una llamada al método WriteString para el carácter o los caracteres equivalentes.
WriteSurrogateCharEntity Tratado como una llamada al método WriteString para el carácter o los caracteres equivalentes.

Para obtener más información sobre la XmlWriter clase, consulte la documentación de referencia de clases XmlWriter .

Varios objetos XmlWriter

Es posible tener varios XPathNavigator objetos que apuntan a diferentes partes de un documento XML con uno o varios objetos abiertos XmlWriter . Se XmlWriter permiten y se admiten varios objetos en escenarios de un solo hilo.

A continuación se muestran notas importantes que se deben tener en cuenta al usar varios XmlWriter objetos.

  • Los fragmentos XML escritos por XmlWriter objetos se agregan al documento XML cuando se llama al Close método de cada XmlWriter objeto. Hasta ese punto, el XmlWriter objeto está escribiendo un fragmento desconectado. Si se realiza una operación en el documento XML, los fragmentos que están siendo escritos por un objeto XmlWriter no se verán afectados antes de que se haya llamado a Close.

  • Si hay un objeto abierto XmlWriter en un subárbol XML determinado y ese subárbol se elimina, el XmlWriter objeto puede agregarse al subárbol. El subárbol simplemente se convierte en un fragmento eliminado.

  • Si se abren varios XmlWriter objetos en el mismo punto del documento XML, se agregan al documento XML en el orden en que se cierran los XmlWriter objetos, no en el orden en que se abrieron.

En el ejemplo siguiente se crea un XmlDocument objeto, se crea un XPathNavigator objeto y, a continuación, se usa el XmlWriter objeto devuelto por el PrependChild método para crear la estructura del primer libro del books.xml archivo. A continuación, el ejemplo lo guarda como archivo book.xml .

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

Guardar un documento XML

Guardar los cambios realizados en un XmlDocument objeto como resultado de los métodos descritos en este tema se realiza mediante los métodos de la XmlDocument clase . Para obtener más información sobre cómo guardar los cambios realizados en un XmlDocument objeto, vea Guardar y escribir un documento.

Consulte también