Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La XPathNavigator classe fornisce un set di metodi utilizzati per rimuovere nodi e valori da un documento XML. Per utilizzare questi metodi, l'oggetto XPathNavigator deve essere modificabile, ovvero la relativa CanEdit proprietà deve essere true.
XPathNavigator gli oggetti che possono modificare un documento XML vengono creati dal CreateNavigator metodo della XmlDocument classe . XPathNavigator gli oggetti creati dalla XPathDocument classe sono di sola lettura e qualsiasi tentativo di utilizzare i metodi di modifica di un XPathNavigator oggetto creato da un XPathDocument oggetto restituisce un oggetto NotSupportedException.
Per altre informazioni sulla creazione di oggetti modificabili XPathNavigator , vedere Lettura di dati XML tramite XPathDocument e XmlDocument.
Rimozione di nodi
La XPathNavigator classe fornisce il DeleteSelf metodo per rimuovere nodi da un documento XML.
Rimozione di un nodo
La XPathNavigator classe fornisce il DeleteSelf metodo per eliminare il nodo corrente in cui un XPathNavigator oggetto è attualmente posizionato da un documento XML.
Dopo l'eliminazione di un nodo tramite il DeleteSelf metodo , non è più raggiungibile dalla radice dell'oggetto XmlDocument . Dopo l'eliminazione di un nodo, l'oggetto XPathNavigator viene posizionato sul nodo padre del nodo eliminato.
Un'operazione di eliminazione non influisce sulla posizione di qualsiasi XPathNavigator oggetto posizionato sul nodo eliminato. Questi XPathNavigator oggetti sono validi nel senso che possono spostarsi all'interno del sottoalbero eliminato, ma non possono essere spostati nell'albero dei nodi principale usando i normali metodi di navigazione del set di nodi della XPathNavigator classe .
Annotazioni
Il MoveTo metodo della XPathNavigator classe può essere usato per spostare nuovamente questi XPathNavigator oggetti nell'albero dei nodi principale o dall'albero dei nodi principale al sottoalbero eliminato.
Nell'esempio seguente l'elemento price del primo book elemento del contosoBooks.xml file viene eliminato usando il DeleteSelf metodo . La posizione dell'oggetto XPathNavigator dopo l'eliminazione dell'elemento price è sull'elemento padre 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);
L'esempio accetta il contosoBooks.xml file come input.
<?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>
Rimozione di un nodo attributo
I nodi dell'attributo vengono rimossi da un documento XML usando il DeleteSelf metodo .
Dopo l'eliminazione di un nodo attributo, non è più raggiungibile dal nodo radice di un XmlDocument oggetto e l'oggetto XPathNavigator viene posizionato sull'elemento padre.
Attributi predefiniti
Indipendentemente dal metodo usato per rimuovere gli attributi, esistono limitazioni speciali per la rimozione di attributi definiti come attributi predefiniti nel DTD o in XML Schema per il documento XML. Gli attributi predefiniti non possono essere rimossi a meno che non venga rimosso anche l'elemento a cui appartengono. Gli attributi predefiniti sono sempre presenti per gli elementi con attributi predefiniti dichiarati e, di conseguenza, l'eliminazione di un attributo predefinito comporta l'inserimento di un attributo sostitutivo nell'elemento e inizializzato al valore predefinito dichiarato.
Rimozione di valori
La XPathNavigator classe fornisce i SetValue metodi e SetTypedValue per rimuovere i valori non tipizzati e tipizzati da un documento XML.
Rimozione di valori non tipizzati
Il SetValue metodo inserisce semplicemente il valore non tipizzato string passato come parametro come valore del nodo in cui l'oggetto XPathNavigator è attualmente posizionato. Il passaggio di una stringa vuota al SetValue metodo rimuove il valore del nodo corrente.
Nell'esempio seguente viene rimosso il valore dell'elemento price del primo book elemento nel contosoBooks.xml file utilizzando il SetValue metodo .
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);
L'esempio accetta il contosoBooks.xml file come input.
<?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>
Rimozione di valori tipizzati
Quando il tipo di un nodo è un tipo semplice W3C XML Schema, il nuovo valore inserito dal SetTypedValue metodo viene controllato rispetto ai facet del tipo semplice prima che il valore venga impostato. Se il nuovo valore non è valido in base al tipo del nodo ( ad esempio, impostando un valore su -1 un elemento il cui tipo è xs:positiveInteger), viene generata un'eccezione. Il SetTypedValue metodo non può essere passato null anche come parametro. Di conseguenza, la rimozione del valore di un nodo tipizzato deve essere conforme al tipo di schema del nodo.
Nel seguente esempio, il valore dell'elemento price del primo elemento book nel file contosoBooks.xml viene rimosso utilizzando il metodo SetTypedValue impostando il valore su 0. Il valore del nodo non viene rimosso, ma il prezzo del libro è stato rimosso in base al tipo di dati di 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);
Nodi dello spazio dei nomi
I nodi namespace non possono essere eliminati da un oggetto XmlDocument. Tentativi di eliminare i nodi dello spazio dei nomi usando il metodo DeleteSelf risultano in un'eccezione.
Proprietà InnerXml ed OuterXml
Le InnerXml proprietà e OuterXml della XPathNavigator classe modificano il markup XML dei nodi in cui un XPathNavigator oggetto è attualmente posizionato.
La InnerXml proprietà modifica il markup XML dei nodi figlio in cui un XPathNavigator oggetto è attualmente posizionato con il contenuto analizzato del codice XML stringspecificato. Analogamente, la OuterXml proprietà modifica il markup XML dei nodi figlio in cui un XPathNavigator oggetto è attualmente posizionato e il nodo corrente stesso.
Oltre ai metodi descritti in questo argomento, è possibile utilizzare le InnerXml proprietà e OuterXml per rimuovere nodi e valori da un documento XML. Per altre informazioni sull'uso delle InnerXml proprietà e OuterXml per modificare i nodi, vedere l'argomento Modify XML Data using XPathNavigator .
Salvataggio di un documento XML
Il salvataggio delle modifiche apportate a un XmlDocument oggetto come risultato dei metodi descritti in questo argomento viene eseguito usando i metodi della XmlDocument classe . Per altre informazioni sul salvataggio delle modifiche apportate a un XmlDocument oggetto, vedere Salvataggio e scrittura di un documento.