Partilhar via


Inserir dados XML usando XPathNavigator

A XPathNavigator classe fornece um conjunto de métodos usados para inserir nós irmãos, filhos e atributos em um documento XML. Para usar esses métodos, o XPathNavigator objeto deve ser editável, ou seja, sua CanEdit propriedade deve ser true.

XPathNavigator objetos que podem editar um documento XML são criados pelo CreateNavigator método da XmlDocument classe. XPathNavigator Os objetos criados pela XPathDocument classe são somente leitura e qualquer tentativa de usar os métodos de edição de um XPathNavigator objeto criado por um XPathDocument objeto resulta em um NotSupportedExceptionarquivo .

Para obter mais informações sobre como criar objetos editáveis XPathNavigator , consulte Lendo dados XML usando XPathDocument e XmlDocument.

Inserindo nós

A XPathNavigator classe fornece métodos para inserir nós irmãos, filhos e atributos em um documento XML. Esses métodos permitem inserir nós e atributos em locais diferentes em relação à posição atual de um XPathNavigator objeto e são descritos nas seções a seguir.

Inserindo nós irmãos

A XPathNavigator classe fornece os seguintes métodos para inserir nós irmãos.

Esses métodos inserem nós irmãos antes e depois do nó no qual um XPathNavigator objeto está posicionado no momento.

Os InsertAfter métodos e InsertBefore são sobrecarregados e aceitam um stringobjeto , XmlReader ou XPathNavigator objeto que contém o nó irmão para adicionar como parâmetros. Ambos os métodos também retornam um XmlWriter objeto usado para inserir nós irmãos.

Os InsertElementAfter métodos e InsertElementBefore inserem um único nó irmão antes e depois do nó em que um XPathNavigator objeto está posicionado no momento usando o prefixo do namespace, o nome local, o URI do namespace e o valor especificado como parâmetros.

No exemplo a seguir, um novo pages elemento é inserido antes do price elemento filho do primeiro book elemento no contosoBooks.xml arquivo.

XmlDocument^ document = gcnew 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);
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)

O exemplo usa o contosoBooks.xml arquivo como uma 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 obter mais informações sobre os InsertAftermétodos , InsertBeforeInsertElementAfter e , consulte InsertElementBefore a documentação de referência de XPathNavigator classe.

Inserindo nós filho

A XPathNavigator classe fornece os seguintes métodos para inserir nós filho.

Esses métodos acrescentam e precedem nós filho ao final e ao início da lista de nós filho do nó em que um XPathNavigator objeto está posicionado no momento.

Como os métodos na seção "Inserindo nós irmãos", os AppendChild métodos e PrependChild aceitam um stringobjeto , XmlReader ou XPathNavigator objeto que contém o nó filho para adicionar como parâmetros. Ambos os métodos também retornam um XmlWriter objeto usado para inserir nós filho.

Também como os métodos na seção "Inserindo nós irmãos", os métodos e PrependChildElement inserem um único nó filho no final e no início da lista de nós filho do nó em que um XPathNavigator objeto está posicionado atualmente usando o prefixo do namespace, o nome local, o AppendChildElement URI do namespace e o valor especificado como parâmetros.

No exemplo a seguir, um novo pages elemento filho é anexado à lista de elementos filho do primeiro book elemento no contosoBooks.xml arquivo.

XmlDocument^ document = gcnew 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);
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)

O exemplo usa o contosoBooks.xml arquivo como uma 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 obter mais informações sobre os AppendChildmétodos , PrependChildAppendChildElement e , consulte PrependChildElement a documentação de referência de XPathNavigator classe.

Inserindo nós de atributo

A XPathNavigator classe fornece os seguintes métodos para inserir nós de atributo.

Esses métodos inserem nós de atributo no nó do elemento no qual um XPathNavigator objeto está posicionado no momento. O CreateAttribute método cria um nó de atributo no nó do elemento em que um XPathNavigator objeto está posicionado no momento usando o prefixo do namespace, o nome local, o URI do namespace e o valor especificado como parâmetros. O CreateAttributes método retorna um XmlWriter objeto usado para inserir nós de atributo.

No exemplo a seguir, new discount e currency attributes são criados no price elemento filho do primeiro book elemento do contosoBooks.xml arquivo usando o XmlWriter objeto retornado do CreateAttributes método.

XmlDocument^ document = gcnew 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);
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)

O exemplo usa o contosoBooks.xml arquivo como uma 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 obter mais informações sobre os CreateAttribute métodos and CreateAttributes , consulte a documentação de referência de XPathNavigator classe.

Copiando nós

Em certos casos, você pode querer preencher um documento XML com o conteúdo de outro documento XML. Tanto a XPathNavigator classe quanto a XmlWriter classe podem copiar nós para um XmlDocument objeto de um objeto ou XPathNavigator objeto existenteXmlReader.

O AppendChild, PrependChild, InsertBefore e InsertAfter métodos da XPathNavigator classe todos têm sobrecargas que podem aceitar um XPathNavigator objeto ou um XmlReader objeto como um parâmetro.

O WriteNode método da XmlWriter classe tem sobrecargas que podem aceitar um XmlNode, XmlReader, ou XPathNavigator objeto.

O exemplo a seguir copia todos os book elementos de um documento para outro.

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

Inserindo valores

A XPathNavigator classe fornece os SetValue métodos e SetTypedValue para inserir valores para um nó em um XmlDocument objeto.

Inserindo valores não tipados

O SetValue método simplesmente insere o valor não tipado string passado como um parâmetro como o valor do nó no qual o XPathNavigator objeto está posicionado no momento. O valor é inserido sem qualquer tipo ou sem verificar se o novo valor é válido de acordo com o tipo do nó se as informações do esquema estiverem disponíveis.

No exemplo a seguir, o SetValue método é usado para atualizar todos os price elementos no contosoBooks.xml arquivo.

XmlDocument^ document = gcnew XmlDocument();
document->Load("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

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

for each (XPathNavigator^ nav in navigator->Select("//bk:price", manager))
{
    if(nav->Value == "11.99")
    {
        nav->SetValue("12.99");
    }
}

Console::WriteLine(navigator->OuterXml);
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)

O exemplo usa o contosoBooks.xml arquivo como uma 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>

Inserindo valores digitados

Quando o tipo de um nó é um tipo simples de esquema XML W3C, o novo valor inserido pelo método é verificado em relação às SetTypedValue facetas do tipo simples antes que o valor seja definido. Se o novo valor não for válido de acordo com o tipo do nó (por exemplo, definindo um valor de -1 em um elemento cujo tipo é xs:positiveInteger), isso resultará em uma exceção.

O exemplo a seguir tenta alterar o price valor do elemento do primeiro book elemento no contosoBooks.xml arquivo para um DateTime valor. Como o tipo de esquema XML do price elemento é definido como xs:decimal nos contosoBooks.xsd arquivos, isso resulta em uma exceção.

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

O exemplo usa o contosoBooks.xml arquivo como uma 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>

O exemplo também toma o contosoBooks.xsd como uma 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>

As propriedades InnerXml e OuterXml

As InnerXml propriedades e OuterXml da classe alteram XPathNavigator a marcação XML dos nós nos quais um XPathNavigator objeto está posicionado no momento.

A InnerXml propriedade altera a marcação XML dos nós filho em que um XPathNavigator objeto está posicionado atualmente com o conteúdo analisado do XML stringfornecido. Da mesma forma, a OuterXml propriedade altera a marcação XML dos nós filho nos quais um XPathNavigator objeto está posicionado no momento, bem como o próprio nó atual.

Além dos métodos descritos neste tópico, as InnerXml propriedades e OuterXml podem ser usadas para inserir nós e valores em um documento XML. Para obter mais informações sobre como usar as InnerXml propriedades e OuterXml para inserir nós e valores, consulte o tópico Modificar dados XML usando XPathNavigator .

Conflitos de namespace e xml:lang

Certos conflitos relacionados ao escopo de namespace e xml:lang declarações podem ocorrer ao inserir dados XML usando os InsertBeforemétodos , InsertAfterAppendChild e PrependChild da XPathNavigator classe que usam XmlReader objetos como parâmetros.

A seguir estão os possíveis conflitos de namespace.

  • Se houver um namespace no escopo dentro do contexto do XmlReader objeto, onde o prefixo para mapeamento de URI de namespace não está no contexto do XPathNavigator objeto, uma nova declaração de namespace será adicionada ao nó recém-inserido.

  • Se o mesmo URI de namespace estiver no escopo dentro XmlReader do contexto do objeto e do contexto do XPathNavigator objeto, mas tiver um prefixo diferente mapeado para ele em ambos os contextos, uma nova declaração de namespace será adicionada ao nó recém-inserido, com o prefixo e o URI de namespace retirados do XmlReader objeto.

  • Se o mesmo prefixo de namespace estiver no escopo dentro do contexto do XmlReader objeto e do contexto do XPathNavigator objeto, mas tiver um URI de namespace diferente mapeado para ele em ambos os contextos, uma nova declaração de namespace será adicionada ao nó recém-inserido que redeclarará esse prefixo com o URI de namespace retirado do XmlReader objeto.

  • Se o prefixo, bem como o URI do namespace no contexto do objeto e no XmlReader contexto do XPathNavigator objeto for o mesmo, nenhuma nova declaração de namespace será adicionada ao nó recém-inserido.

Nota

A descrição acima também se aplica a declarações de namespace com o vazio string como um prefixo (por exemplo, a declaração de namespace padrão).

Seguem-se os possíveis xml:lang conflitos.

  • Se houver um xml:lang atributo no escopo dentro do contexto do XmlReader objeto, mas não no XPathNavigator contexto do objeto, um xml:lang atributo cujo valor é retirado do XmlReader objeto será adicionado ao nó recém-inserido.

  • Se houver um xml:lang atributo no escopo dentro do contexto do XmlReader objeto e do contexto do XPathNavigator objeto, mas cada um tiver um valor diferente, um xml:lang atributo cujo valor é retirado do XmlReader objeto será adicionado ao nó recém-inserido.

  • Se houver um xml:lang atributo no escopo dentro do contexto do XmlReader objeto e do contexto do XPathNavigator objeto, mas cada um com o mesmo valor, nenhum novo xml:lang atributo será adicionado no nó recém-inserido.

  • Se houver um xml:lang atributo no escopo dentro do contexto do XPathNavigator objeto, mas nenhum existente no contexto do XmlReader objeto, nenhum xml:lang atributo será adicionado ao nó recém-inserido.

Inserindo nós com XmlWriter

Os métodos usados para inserir nós irmãos, filhos e atributos descritos na seção "Inserindo nós e valores" estão sobrecarregados. Os InsertAftermétodos , InsertBefore, PrependChildAppendChild, e CreateAttributes da XPathNavigator classe retornam um XmlWriter objeto usado para inserir nós.

Métodos XmlWriter sem suporte

Nem todos os métodos usados para gravar informações em um documento XML usando a XmlWriter classe são suportados XPathNavigator pela classe devido à diferença entre o modelo de dados XPath e o DOM (Document Object Model).

A tabela a seguir descreve os métodos de XmlWriter classe não suportados XPathNavigator pela classe.

Método Description
WriteEntityRef Lança uma NotSupportedException exceção.
WriteDocType Ignorado no nível raiz e lança uma NotSupportedException exceção se chamado em qualquer outro nível no documento XML.
WriteCData Tratada como uma chamada para o WriteString método para o(s) caractere(s) equivalente(s).
WriteCharEntity Tratada como uma chamada para o WriteString método para o(s) caractere(s) equivalente(s).
WriteSurrogateCharEntity Tratada como uma chamada para o WriteString método para o(s) caractere(s) equivalente(s).

Para obter mais informações sobre a XmlWriter classe, consulte a documentação de referência da XmlWriter classe.

Vários objetos XmlWriter

É possível ter vários XPathNavigator objetos apontando para diferentes partes de um documento XML com um ou mais objetos abertos XmlWriter . Vários XmlWriter objetos são permitidos e suportados em cenários de thread único.

A seguir estão observações importantes a serem consideradas ao usar vários XmlWriter objetos.

  • Fragmentos XML escritos por XmlWriter objetos são adicionados ao documento XML quando o Close método de cada XmlWriter objeto é chamado. Até esse ponto, o objeto está escrevendo um fragmento XmlWriter desconectado. Se uma operação for executada no documento XML, quaisquer fragmentos que estejam sendo gravados por um XmlWriter objeto, antes que o Close tenha sido chamado, não serão afetados.

  • Se houver um objeto aberto XmlWriter em uma subárvore XML específica e essa subárvore for excluída, o XmlWriter objeto ainda poderá ser adicionado à subárvore. A subárvore simplesmente se torna um fragmento excluído.

  • Se vários XmlWriter objetos forem abertos no mesmo ponto do documento XML, eles serão adicionados ao documento XML na ordem em que os XmlWriter objetos são fechados, não na ordem em que foram abertos.

O exemplo a seguir cria um XmlDocument objeto, cria um XPathNavigator objeto e, em seguida, usa o XmlWriter objeto retornado pelo PrependChild método para criar a estrutura do primeiro livro no books.xml arquivo. O exemplo então o salva como o book.xml arquivo.

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 um documento XML

Salvar alterações feitas em um XmlDocument objeto como resultado dos métodos descritos neste tópico é executado usando os XmlDocument métodos da classe. Para obter mais informações sobre como salvar alterações feitas em um XmlDocument objeto, consulte Salvando e gravando um documento.

Consulte também