Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die XPathNavigator Klasse stellt eine Reihe von Methoden bereit, die zum Entfernen von Knoten und Werten aus einem XML-Dokument verwendet werden. Um diese Methoden verwenden zu können, muss das XPathNavigator Objekt bearbeitbar sein, d. h. seine CanEdit Eigenschaft muss sein true.
XPathNavigator Objekte, die ein XML-Dokument bearbeiten können, werden von der CreateNavigator Methode der XmlDocument Klasse erstellt. XPathNavigator von der XPathDocument Klasse erstellte Objekte sind schreibgeschützt, und jeder Versuch, die Bearbeitungsmethoden eines XPathNavigator objekts zu verwenden, das von einem XPathDocument Objekt erstellt wurde, führt zu einer NotSupportedException.
Weitere Informationen zum Erstellen bearbeitbarer XPathNavigator Objekte finden Sie unter Lesen von XML-Daten mit XPathDocument und XmlDocument.
Entfernen von Knoten
Die XPathNavigator Klasse stellt die DeleteSelf Methode zum Entfernen von Knoten aus einem XML-Dokument bereit.
Entfernen eines Knotens
Die XPathNavigator Klasse stellt die DeleteSelf Methode zum Löschen des aktuellen Knotens bereit, auf dem ein XPathNavigator Objekt derzeit aus einem XML-Dokument positioniert ist.
Nachdem ein Knoten mithilfe der DeleteSelf Methode gelöscht wurde, kann er nicht mehr vom Stamm des XmlDocument Objekts aus erreicht werden. Nachdem ein Knoten gelöscht wurde, wird XPathNavigator auf dem übergeordneten Knoten des gelöschten Knotens positioniert.
Ein Löschvorgang wirkt sich nicht auf die Position eines XPathNavigator Objekts aus, das auf dem gelöschten Knoten positioniert ist. Diese XPathNavigator Objekte sind gültig, sodass sie innerhalb der gelöschten Unterstruktur verschoben werden können, aber nicht mithilfe der regulären Navigationsmethoden des Knotensatzes der XPathNavigator Klasse in die Hauptknotenstruktur verschoben werden können.
Hinweis
Die MoveTo Methode der XPathNavigator Klasse kann verwendet werden, um diese XPathNavigator Objekte zurück in die Hauptknotenstruktur oder aus der Hauptknotenstruktur in die gelöschte Unterstruktur zu verschieben.
Im folgenden Beispiel wird das price Element des ersten book Elements der contosoBooks.xml Datei mithilfe der DeleteSelf Methode gelöscht. Die Position des XPathNavigator Objekts, nachdem das price Element gelöscht wurde, befindet sich im übergeordneten book Element.
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);
Im Beispiel wird die contosoBooks.xml Datei als Eingabe verwendet.
<?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>
Entfernen eines Attributknotens
Attributknoten werden mithilfe der DeleteSelf Methode aus einem XML-Dokument entfernt.
Nachdem ein Attributknoten gelöscht wurde, kann er nicht mehr vom Stammknoten eines XmlDocument Objekts aus erreicht werden, und das XPathNavigator Objekt wird im übergeordneten Element positioniert.
Standardattribute
Unabhängig von der Methode zum Entfernen von Attributen gibt es besondere Einschränkungen beim Entfernen von Attributen, die als Standardattribute im DTD- oder XML-Schema für das XML-Dokument definiert sind. Standardattribute können nicht entfernt werden, es sei denn, das Element, zu dem sie gehören, wird ebenfalls entfernt. Standardattribute sind immer für Elemente vorhanden, die Standardattribute deklariert haben, und daher führt das Löschen eines Standardattributes dazu, dass ein Ersatzattribute in das Element eingefügt und auf den Standardwert initialisiert wird, der deklariert wurde.
Entfernen von Werten
Die XPathNavigator Klasse stellt die SetValue und SetTypedValue Methoden bereit, um nicht typisierte und eingegebene Werte aus einem XML-Dokument zu entfernen.
Entfernen nicht eingegebener Werte
Die SetValue Methode fügt einfach den nicht typisierten string Wert ein, der als Parameter übergeben wird, als Wert des Knotens, auf dem das XPathNavigator Objekt aktuell positioniert ist. Durch Übergeben einer leeren Zeichenfolge an die SetValue Methode wird der Wert des aktuellen Knotens entfernt.
Im folgenden Beispiel wird der Wert des price Elements des ersten book Elements in der contosoBooks.xml Datei mithilfe der SetValue Methode entfernt.
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);
Im Beispiel wird die contosoBooks.xml Datei als Eingabe verwendet.
<?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>
Entfernen typisierter Werte
Wenn der Typ eines Knotens ein einfacher W3C-XML-Schematyp ist, wird der neue Wert, der von der SetTypedValue Methode eingefügt wird, anhand der Facets des einfachen Typs überprüft, bevor der Wert festgelegt wird. Wenn der neue Wert nicht gemäß dem Typ des Knotens gültig ist (z. B. festlegen eines Werts -1 für ein Element, dessen Typ ist xs:positiveInteger), führt er zu einer Ausnahme. Die SetTypedValue Methode kann auch nicht als Parameter übergeben null werden. Daher muss das Entfernen des Werts eines typierten Knotens dem Schematyp des Knotens entsprechen.
Im folgenden Beispiel wird der Wert des price-Elements des ersten book-Elements der Datei contosoBooks.xml mithilfe der SetTypedValue-Methode entfernt, indem der Wert auf 0 festgelegt wird. Der Wert des Knotens wird nicht entfernt, es wird jedoch der Buchpreis entsprechend seinem Datentyp xs:decimal entfernt.
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);
Namespaceknoten
Namespaceknoten können nicht aus einem XmlDocument Objekt gelöscht werden. Versuche, Namespaceknoten mithilfe der DeleteSelf Methode zu löschen, führt zu einer Ausnahme.
Die InnerXml- und OuterXml-Eigenschaft
Die Eigenschaften InnerXml und OuterXml der Klasse XPathNavigator ändern das XML-Markup der Knoten, auf denen ein XPathNavigator Objekt derzeit positioniert ist.
Die InnerXml Eigenschaft ändert das XML-Markup der untergeordneten Knoten, an dem ein XPathNavigator Objekt derzeit mit dem analysierten Inhalt des angegebenen XML stringpositioniert ist. Ebenso ändert die OuterXml Eigenschaft das XML-Markup der untergeordneten Knoten, auf denen ein XPathNavigator Objekt derzeit positioniert ist, sowie den aktuellen Knoten selbst.
Zusätzlich zu den in diesem Thema beschriebenen Methoden können die InnerXml Und OuterXml Eigenschaften verwendet werden, um Knoten und Werte aus einem XML-Dokument zu entfernen. Weitere Informationen zur Verwendung der InnerXml und OuterXml Eigenschaften zum Ändern von Knoten finden Sie im Thema XML-Daten mit XPathNavigator ändern.
Speichern eines XML-Dokuments
Das Speichern von Änderungen, die an einem XmlDocument Objekt vorgenommen wurden, als Ergebnis der in diesem Thema beschriebenen Methoden wird mithilfe der Methoden der XmlDocument Klasse ausgeführt. Weitere Informationen zum Speichern von An einem XmlDocument Objekt vorgenommenen Änderungen finden Sie unter Speichern und Schreiben eines Dokuments.