Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A XPathNavigator classe fornece um conjunto de métodos usados para remover nós e valores de um documento XML. Para usar esses métodos, o XPathNavigator objeto deve ser editável, ou seja, sua CanEdit propriedade deve ser true
.
XPathNavigator os objetos que podem editar um documento XML são criados pelo CreateNavigator método da XmlDocument classe. XPathNavigator objetos criados pela classe XPathDocument são somente de leitura e qualquer tentativa de usar os métodos de edição de um objeto XPathNavigator criado por um objeto XPathDocument resulta em um NotSupportedException.
Para obter mais informações sobre como criar objetos editáveis XPathNavigator , consulte Ler dados XML usando XPathDocument e XmlDocument.
Removendo os nós
A XPathNavigator classe fornece o DeleteSelf método para remover nós de um documento XML.
Remover um Nó
A classe de XPathNavigator fornece o método de DeleteSelf para excluir o nó atual que um objeto de XPathNavigator é posicionado atualmente de um documento XML.
Depois que um nó tiver sido excluído usando o DeleteSelf método, ele não poderá mais ser acessado da raiz do XmlDocument objeto. Depois que um nó foi excluído, XPathNavigator está localizado no nó pai do nó excluído.
Uma operação de exclusão não afeta a posição de nenhum XPathNavigator objeto posicionado no nó excluído. Esses XPathNavigator objetos são válidos no sentido de que podem se mover dentro da subárvore excluída, mas não podem ser movidos para a árvore de nó principal usando os métodos de navegação regulares do conjunto de nós da XPathNavigator classe.
Observação
O método MoveTo da classe XPathNavigator pode ser utilizado para mover esses objetos XPathNavigator de volta para a árvore de nós principal, ou da árvore de nós principal para a subárvore deletada.
No exemplo a seguir, o price
elemento do primeiro book
elemento do contosoBooks.xml
arquivo é excluído usando o DeleteSelf método. A posição do XPathNavigator objeto depois que o price
elemento é excluído está no elemento pai book
.
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.DeleteSelf()
Console.WriteLine("Position after delete: {0}", navigator.Name)
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.DeleteSelf();
Console.WriteLine("Position after delete: {0}", navigator.Name);
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>
Removendo um nó de atributo
Os nós de atributo são removidos de um documento XML usando o método DeleteSelf .
Depois que um nó de atributo foi excluído, não é mais alcançável do nó raiz de um objeto de XmlDocument e o objeto de XPathNavigator é posicionado no elemento pai.
Atributos padrão
Independentemente do método usado para remover atributos, há limitações especiais na remoção de atributos definidos como atributos padrão no esquema DTD ou XML para o documento XML. Os atributos padrão não podem ser removidos, a menos que o elemento ao qual pertencem também seja removido. Atributos padrão estão sempre presentes para elementos que têm atributos padrão declarados e, como resultado, excluir um atributo padrão resulta em um atributo de substituição sendo inserido no elemento e inicializado para o valor padrão que foi declarado.
Removendo os valores
A classe de XPathNavigator fornece os métodos de SetValue e de SetTypedValue para remover sem tipo e os valores tipados de um documento XML.
Removendo os valores sem tipo
O método SetValue simplesmente insere o valor não tipado string
passado como um parâmetro como valor do nó em que o objeto XPathNavigator está atualmente posicionado. Passando uma cadeia de caracteres vazia para o método de SetValue remove o valor do nó atual.
O exemplo a seguir remove o valor do elemento price
do primeiro elemento book
no arquivo contosoBooks.xml
usando o método SetValue.
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.SetValue("")
navigator.MoveToRoot()
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.SetValue("");
navigator.MoveToRoot();
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>
Removendo os valores tipados
Quando o tipo de nó é um tipo simples de Esquema XML W3C, o novo valor inserido pelo método SetTypedValue é verificado em relação às facetas do tipo simples antes que o valor seja atribuído. Se o novo valor não for válido de acordo com o tipo do nó (por exemplo, definir um valor em -1
um elemento cujo tipo é xs:positiveInteger
), ele resultará em uma exceção. O SetTypedValue método também não pode ser passado null
como um parâmetro. Como resultado remova o valor de um nó tipado deve seguir com o tipo do nó.
O exemplo a seguir remove o valor do elemento price
do primeiro elemento book
no arquivo contosoBooks.xml
usando o método SetTypedValue ao definir o valor como 0
. O valor do nó não é removido, mas o custo de livro foi removido de acordo com seu tipo de dados de xs:decimal
.
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(0)
navigator.MoveToRoot()
Console.WriteLine(navigator.OuterXml)
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(0);
navigator.MoveToRoot();
Console.WriteLine(navigator.OuterXml);
Nós de namespace
Nódulos de namespace não podem ser excluídos de objeto XmlDocument. As tentativas de excluir nós de namespace usando o DeleteSelf método resultam em uma exceção.
As propriedades InnerXml e OuterXml
As propriedades InnerXml e OuterXml da classe XPathNavigator alteram a marcação XML dos nós em que um objeto XPathNavigator está atualmente posicionado.
A InnerXml propriedade altera a marcação XML dos nós filho no qual um objeto XPathNavigator está atualmente posicionado, com o conteúdo analisado do XML string
fornecido. Da mesma forma, a OuterXml propriedade altera a marcação XML dos nós filho em que o objeto XPathNavigator está atualmente posicionado, bem como do próprio nó atual.
Além dos métodos descritos neste tópico, as propriedades InnerXml e OuterXml podem ser usadas para remover nós e valores de um documento XML. Para obter mais informações sobre como usar as propriedades InnerXml e OuterXml para modificar nós, consulte o tópico Modificar Dados XML usando XPathNavigator.
Salvando um documento XML
Salvar alterações feitas em um XmlDocument objeto como resultado dos métodos descritos neste tópico é executado usando os métodos da XmlDocument classe. Para obter mais informações sobre como salvar alterações feitas em um XmlDocument objeto, consulte Salvar e escrever um documento.