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 Einfügen gleichgeordneter, untergeordneter und Attributknoten in ein 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.
Einfügen von Knoten
Die XPathNavigator Klasse stellt Methoden zum Einfügen gleichgeordneter, untergeordneter und Attributknoten in ein XML-Dokument bereit. Mit diesen Methoden können Sie Knoten und Attribute an unterschiedlichen Positionen in Bezug auf die aktuelle Position eines XPathNavigator Objekts einfügen und in den folgenden Abschnitten beschrieben werden.
Einfügen gleichgeordneter Knoten
Die XPathNavigator Klasse stellt die folgenden Methoden zum Einfügen gleichgeordneter Knoten bereit.
Diese Methoden fügen gleichgeordnete Knoten vor und nach dem Knoten ein, auf dem ein XPathNavigator Objekt aktuell positioniert ist.
Die InsertAfter Methoden InsertBefore sind überladen und akzeptieren ein stringObjekt, XmlReader das den gleichgeordneten Knoten enthält, XPathNavigator um als Parameter hinzuzufügen. Beide Methoden geben auch ein XmlWriter Objekt zurück, das zum Einfügen gleichgeordneter Knoten verwendet wird.
Die InsertElementAfter Methoden InsertElementBefore fügen einen einzelnen gleichgeordneten Knoten vor und nach dem Knoten ein, auf dem ein XPathNavigator Objekt derzeit unter Verwendung des Namespacepräfixes, des lokalen Namens, des Namespace-URI und des werts positioniert wird, der als Parameter angegeben ist.
Im folgenden Beispiel wird ein neues pages Element vor dem price untergeordneten Element des ersten book Elements in der contosoBooks.xml Datei eingefügt.
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)
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>
Weitere Informationen zu den InsertAfterKlassenreferenzen InsertBeforeInsertElementAfterund InsertElementBefore Methoden finden Sie in der XPathNavigator Klassenreferenzdokumentation.
Einfügen untergeordneter Knoten
Die XPathNavigator Klasse stellt die folgenden Methoden zum Einfügen untergeordneter Knoten bereit.
Diese Methoden fügen untergeordnete Knoten an das Ende und den Anfang der Liste der untergeordneten Knoten des Knotens an, auf dem ein XPathNavigator Objekt derzeit positioniert ist.
Wie die Methoden im Abschnitt "Einfügen gleichgeordneter Knoten" akzeptieren die AppendChild methoden PrependChild ein , ein stringObjekt XmlReader oder XPathNavigator ein Objekt, das den untergeordneten Knoten enthält, um als Parameter hinzuzufügen. Beide Methoden geben auch ein XmlWriter Objekt zurück, das zum Einfügen untergeordneter Knoten verwendet wird.
Ebenso wie die Methoden im Abschnitt "Einfügen gleichgeordneter Knoten" fügen die AppendChildElement Methoden PrependChildElement einen einzelnen untergeordneten Knoten am Ende des Knotens und den Anfang der Liste der untergeordneten Knoten des Knotens ein, auf dem ein XPathNavigator Objekt derzeit mithilfe des Namespacepräfixes, des lokalen Namens, des Namespace-URI und des als Parameter angegebenen Werts positioniert ist.
Im folgenden Beispiel wird ein neues pages untergeordnetes Element an die Liste der untergeordneten Elemente des ersten book Elements in der contosoBooks.xml Datei angefügt.
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)
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>
Weitere Informationen zu den AppendChildKlassenreferenzen PrependChildAppendChildElementund PrependChildElement Methoden finden Sie in der XPathNavigator Klassenreferenzdokumentation.
Einfügen von Attributknoten
Die XPathNavigator Klasse stellt die folgenden Methoden zum Einfügen von Attributknoten bereit.
Diese Methoden fügen Attributknoten auf dem Elementknoten ein, auf dem ein XPathNavigator Objekt derzeit positioniert ist. Die CreateAttribute Methode erstellt einen Attributknoten auf dem Elementknoten, auf dem ein XPathNavigator Objekt derzeit mithilfe des Namespacepräfixes, des lokalen Namens, des Namespace-URI und des als Parameter angegebenen Werts positioniert ist. Die CreateAttributes Methode gibt ein XmlWriter Objekt zurück, das zum Einfügen von Attributknoten verwendet wird.
Im folgenden Beispiel werden neue discount und currency Attribute für das price untergeordnete Element des ersten book Elements in der contosoBooks.xml Datei mithilfe des XmlWriter von der CreateAttributes Methode zurückgegebenen Objekts erstellt.
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)
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>
Weitere Informationen zu den CreateAttribute Und CreateAttributes Methoden finden Sie in der XPathNavigator Klassenreferenzdokumentation.
Kopieren von Knoten
In bestimmten Fällen möchten Sie möglicherweise ein XML-Dokument mit dem Inhalt aus einem anderen XML-Dokument auffüllen. Sowohl die XPathNavigator Klasse als auch die XmlWriter Klasse können Knoten aus einem vorhandenen XmlDocument Objekt oder XmlReader Objekt in ein XPathNavigator Objekt kopieren.
Alle Methoden AppendChildder PrependChild Klasse weisen Überladungen auf, die ein InsertBefore Objekt oder ein InsertAfter Objekt als Parameter akzeptieren können. XPathNavigatorXPathNavigatorXmlReader
Die WriteNode Methode der XmlWriter Klasse verfügt über Überladungen, die ein , XmlNodeoder XmlReader ein XPathNavigatorObjekt akzeptieren können.
Im folgenden Beispiel werden alle book Elemente aus einem Dokument in ein anderes kopiert.
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");
Einfügen von Werten
Die XPathNavigator Klasse stellt die SetValue Und SetTypedValue Methoden zum Einfügen von Werten für einen Knoten in ein XmlDocument Objekt bereit.
Einfügen 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. Der Wert wird ohne Typ oder ohne Überprüfung der Gültigkeit des neuen Werts gemäß dem Typ des Knotens eingefügt, wenn Schemainformationen verfügbar sind.
Im folgenden Beispiel wird die SetValue Methode verwendet, um alle price Elemente in der contosoBooks.xml Datei zu aktualisieren.
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)
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>
Einfügen eingegebener 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.
Im folgenden Beispiel wird versucht, den Wert des price Elements des ersten book Elements in der contosoBooks.xml Datei in einen DateTime Wert zu ändern. Da der XML-Schematyp des price Elements wie xs:decimal in den contosoBooks.xsd Dateien definiert ist, führt dies zu einer Ausnahme.
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);
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>
Im Beispiel wird auch contosoBooks.xsd als Eingabe verwendet.
<?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>
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 in ein XML-Dokument einzufügen. Weitere Informationen zum Einfügen von InnerXmlOuterXml Knoten und Werten finden Sie im Thema zum Ändern von XML-Daten mit XPathNavigator .
Namespace und xml:lang Conflicts
Bestimmte Konflikte im Zusammenhang mit dem Umfang von Namespaces und xml:lang Deklarationen können auftreten, wenn XML-Daten mithilfe der InsertBeforeKlassen InsertAfterund AppendChild Methoden der Klasse eingefügt werden, PrependChild die XPathNavigator Objekte als Parameter verwendenXmlReader.
Im Folgenden sind die möglichen Namespacekonflikte aufgeführt.
Wenn innerhalb des Kontexts des XmlReader Objekts ein Namespace vorhanden ist, bei dem sich das Präfix zur Namespace-URI-Zuordnung nicht im Kontext des XPathNavigator Objekts befindet, wird dem neu eingefügten Knoten eine neue Namespacedeklaration hinzugefügt.
Wenn derselbe Namespace-URI sowohl im Kontext des XmlReader Objekts als auch im Kontext des XPathNavigator Objekts im Gültigkeitsbereich liegt, aber in beiden Kontexten ein anderes Präfix zugeordnet ist, wird dem neu eingefügten Knoten eine neue Namespacedeklaration hinzugefügt, wobei das Präfix und der Namespace-URI aus dem XmlReader Objekt stammen.
Wenn dasselbe Namespacepräfix sowohl im Kontext des Objekts als XmlReader auch im Kontext des XPathNavigator Objekts im Gültigkeitsbereich liegt, aber in beiden Kontexten einen anderen Namespace-URI zugeordnet ist, wird dem neu eingefügten Knoten eine neue Namespacedeklaration hinzugefügt, die dieses Präfix erneut mit dem Namespace-URI deklariert, der aus XmlReader dem Objekt stammt.
Wenn das Präfix sowie der Namespace-URI sowohl im Kontext des Objekts als auch XmlReader im XPathNavigator Kontext des Objekts identisch ist, wird dem neu eingefügten Knoten keine neue Namespacedeklaration hinzugefügt.
Hinweis
Die obige Beschreibung gilt auch für Namespacedeklarationen mit dem leeren string als Präfix (z. B. die Standardnamespacedeklaration).
Nachfolgend sind die möglichen Konflikte aufgeführt xml:lang .
Wenn ein Attribut im Bereich innerhalb des Kontexts des
xml:langObjekts, aber nicht im XmlReader Kontext des Objekts vorhanden istXPathNavigator, wird einxml:langAttribut, dessen Wert aus dem XmlReader Objekt stammt, dem neu eingefügten Knoten hinzugefügt.Wenn sowohl im Kontext des
xml:langObjekts als auch im Kontext des XmlReader Objekts ein XPathNavigator Attribut vorhanden ist, aber jeder einen anderen Wert aufweist, wird einxml:langAttribut, dessen Wert aus dem XmlReader Objekt stammt, dem neu eingefügten Knoten hinzugefügt.Wenn ein Attribut im Bereich sowohl im Kontext des
xml:langObjekts als auch im Kontext des XmlReader Objekts vorhanden istXPathNavigator, aber jeder mit demselben Wert, wird dem neu eingefügten Knoten kein neuesxml:langAttribut hinzugefügt.Wenn innerhalb des Kontexts des Objekts ein
xml:langAttribut vorhanden ist, im Kontext des Objekts aber keines vorhanden XPathNavigator ist, wird dem neu eingefügten Knoten kein XmlReader Attributxml:langhinzugefügt.
Einfügen von Knoten mit XmlWriter
Die Methoden zum Einfügen gleichgeordneter, untergeordneter und Attributknoten, die im Abschnitt "Einfügen von Knoten und Werten" beschrieben werden, werden überladen. Die InsertAfterMethoden , InsertBefore, AppendChildund PrependChildCreateAttributes Methoden der XPathNavigator Klasse geben ein XmlWriter Objekt zurück, das zum Einfügen von Knoten verwendet wird.
Nicht unterstützte XmlWriter-Methoden
Nicht alle Methoden, die zum Schreiben von Informationen in ein XML-Dokument mit der Klasse verwendet werden, werden von der XmlWriterXPathNavigator Klasse unterstützt, da die Differenz zwischen dem XPath-Datenmodell und dem Dokumentobjektmodell (Document Object Model, DOM) besteht.
In der folgenden Tabelle werden die XmlWriter Klassenmethoden beschrieben, die von der XPathNavigator Klasse nicht unterstützt werden.
| Methode | BESCHREIBUNG |
|---|---|
| WriteEntityRef | Löst eine NotSupportedException Ausnahme aus. |
| WriteDocType | Wird auf der Stammebene ignoriert und löst eine NotSupportedException Ausnahme aus, wenn sie auf einer anderen Ebene im XML-Dokument aufgerufen wird. |
| WriteCData | Wird als Aufruf der WriteString Methode für das entsprechende Zeichen oder die entsprechenden Zeichen behandelt. |
| WriteCharEntity | Wird als Aufruf der WriteString Methode für das entsprechende Zeichen oder die entsprechenden Zeichen behandelt. |
| WriteSurrogateCharEntity | Wird als Aufruf der WriteString Methode für das entsprechende Zeichen oder die entsprechenden Zeichen behandelt. |
Weitere Informationen zur XmlWriter Klasse finden Sie in der XmlWriter Klassenreferenzdokumentation.
Mehrere XmlWriter-Objekte
Es ist möglich, dass mehrere XPathNavigator Objekte auf verschiedene Teile eines XML-Dokuments mit einem oder mehreren geöffneten XmlWriter Objekten verweisen. Mehrere XmlWriter Objekte sind in Singlethread-Szenarien zulässig und unterstützt.
Im Folgenden finden Sie wichtige Hinweise zur Verwendung mehrerer XmlWriter Objekte.
XML-Fragmente, die von XmlWriter Objekten geschrieben werden, werden dem XML-Dokument hinzugefügt, wenn die Close Methode jedes XmlWriter Objekts aufgerufen wird. Bis zu diesem Punkt schreibt das XmlWriter Objekt ein getrenntes Fragment. Wenn ein Vorgang für das XML-Dokument ausgeführt wird, sind alle Fragmente, die von einem XmlWriter Objekt geschrieben werden, vor dem Close Aufruf nicht betroffen.
Wenn ein offenes XmlWriter Objekt in einer bestimmten XML-Unterstruktur vorhanden ist und diese Unterstruktur gelöscht wird, kann das XmlWriter Objekt der Unterstruktur weiterhin hinzugefügt werden. Die Unterstruktur wird einfach zu einem gelöschten Fragment.
Wenn mehrere XmlWriter Objekte an demselben Punkt im XML-Dokument geöffnet werden, werden sie dem XML-Dokument in der Reihenfolge hinzugefügt, in der die XmlWriter Objekte geschlossen werden, nicht in der Reihenfolge, in der sie geöffnet wurden.
Im folgenden Beispiel wird ein XmlDocument Objekt erstellt, ein XPathNavigator Objekt erstellt und anschließend das XmlWriter von der PrependChild Methode zurückgegebene Objekt verwendet, um die Struktur des ersten Buchs in der books.xml Datei zu erstellen. Das Beispiel speichert sie dann als book.xml Datei.
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");
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.