Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klasa XPathNavigator udostępnia zestaw metod używanych do wstawiania węzłów równorzędnych, podrzędnych i atrybutów w dokumencie XML. Aby można było używać tych metod, XPathNavigator obiekt musi być edytowalny, czyli jego CanEdit właściwość musi mieć wartość true
.
XPathNavigator obiekty, które mogą edytować dokument XML, są tworzone przez CreateNavigator metodę XmlDocument klasy . XPathNavigator obiekty utworzone przez klasę XPathDocument są tylko do odczytu, a każda próba użycia metod edycji obiektu XPathNavigator, który został utworzony przez XPathDocument obiekt, powoduje wyświetlenie NotSupportedException.
Aby uzyskać więcej informacji na temat tworzenia obiektów edytowalnych XPathNavigator , zobacz Odczytywanie danych XML przy użyciu elementów XPathDocument i XmlDocument.
Wstawianie węzłów
Klasa XPathNavigator udostępnia metody wstawiania węzłów równorzędnych, podrzędnych i atrybutów w dokumencie XML. Te metody umożliwiają wstawianie węzłów i atrybutów w różnych lokalizacjach w odniesieniu do bieżącej XPathNavigator pozycji obiektu i opisano je w poniższych sekcjach.
Wstawianie węzłów równorzędnych
Klasa XPathNavigator udostępnia następujące metody wstawiania węzłów równorzędnych.
Te metody wstawiają węzły równorzędne przed i po węźle XPathNavigator, na którym obecnie jest pozycjonowany obiekt.
Metody InsertAfter i InsertBefore są przeciążone i akceptują string
obiekt , XmlReader lub XPathNavigator obiekt zawierający węzeł równorzędny, aby dodać jako parametry. Obie metody zwracają obiekt XmlWriter, który jest używany do wstawiania węzłów równorzędnych.
Metody InsertElementAfter i InsertElementBefore wstawiają jeden węzeł równorzędny przed węzłem oraz po węźle, na którym obecnie znajduje się obiekt XPathNavigator, wykorzystując przedrostek przestrzeni nazwowy, nazwę lokalną, identyfikator URI przestrzeni nazw i wartość określone jako parametry.
W poniższym przykładzie nowy pages
element jest wstawiany przed price
elementem podrzędnym pierwszego book
elementu w contosoBooks.xml
pliku.
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)
W przykładzie wykorzystuje się plik contosoBooks.xml
jako dane wejściowe.
<?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>
Aby uzyskać więcej informacji na temat metod InsertAfter, InsertBefore, InsertElementAfter i InsertElementBefore, zobacz dokumentację referencyjną klasy XPathNavigator.
Wstawianie węzłów podrzędnych
Klasa XPathNavigator udostępnia następujące metody wstawiania węzłów podrzędnych.
Te metody dodają węzły podrzędne na końcu i na początku listy węzłów podrzędnych, na których obecnie znajduje się obiekt XPathNavigator.
Podobnie jak metody w sekcji "Wstawianie węzłów równorzędnych", metody AppendChild i PrependChild akceptują string
obiekt, XmlReader lub obiekt XPathNavigator zawierający węzeł podrzędny jako parametr do dodania. Obie metody zwracają obiekt XmlWriter, który jest używany do wstawiania węzłów podrzędnych.
Podobnie jak metody w sekcji "Wstawianie węzłów równorzędnych", metody AppendChildElement i PrependChildElement wstawiają pojedynczy węzeł podrzędny odpowiednio na końcu i początku listy węzłów podrzędnych węzła, na którym obiekt XPathNavigator jest obecnie umieszczony, używając prefiksu przestrzeni nazw, lokalnej nazwy, identyfikatora URI przestrzeni nazw i wartości określonych jako parametry.
W poniższym przykładzie nowy pages
element podrzędny jest dołączany do listy elementów podrzędnych pierwszego book
elementu w contosoBooks.xml
pliku.
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)
W przykładzie wykorzystuje się plik contosoBooks.xml
jako dane wejściowe.
<?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>
Aby uzyskać więcej informacji na temat metod AppendChild, PrependChild, AppendChildElement i PrependChildElement, zobacz dokumentację referencyjną klasy XPathNavigator.
Wstawianie węzłów atrybutów
Klasa XPathNavigator udostępnia następujące metody wstawiania węzłów atrybutów.
Te metody wstawiają węzły atrybutów do węzła elementu XPathNavigator, na którym obecnie znajduje się obiekt. Metoda CreateAttribute tworzy węzeł atrybutu na węźle elementu, na którym obiekt jest obecnie umieszczony, przy użyciu prefiksu przestrzeni nazw, nazwy lokalnej, identyfikatora URI przestrzeni nazw i wartości określonych jako parametry. Metoda CreateAttributes zwraca XmlWriter obiekt używany do wstawiania węzłów atrybutów.
W poniższym przykładzie nowe discount
i currency
atrybuty są tworzone na elemencie podrzędnym pierwszego price
elementu w pliku book
przy użyciu obiektu contosoBooks.xml
zwróconego z metody XmlWriter.
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)
W przykładzie wykorzystuje się plik contosoBooks.xml
jako dane wejściowe.
<?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>
Aby uzyskać więcej informacji na temat metod CreateAttribute i CreateAttributes, zobacz dokumentację referencyjną klasy XPathNavigator.
Kopiowanie węzłów
W niektórych przypadkach możesz wypełnić dokument XML zawartością innego dokumentu XML. Zarówno XPathNavigator klasa, jak i XmlWriter klasa mogą kopiować węzły do obiektu XmlDocument z istniejącego obiektu XmlReader lub obiektu XPathNavigator.
Metody AppendChild, PrependChild, InsertBefore i InsertAfter klasy XPathNavigator mają przeciążenia, które mogą akceptować obiekt XPathNavigator lub obiekt XmlReader jako parametr.
Metoda WriteNode klasy XmlWriter ma przeciążenia, które mogą akceptować obiekt XmlNode, XmlReader lub XPathNavigator.
Poniższy przykład kopiuje wszystkie book
elementy z jednego dokumentu do innego.
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");
Wstawianie wartości
Klasa XPathNavigator udostępnia metody SetValue i SetTypedValue do wstawiania wartości dla węzła do obiektu XmlDocument.
Wstawianie nietypowanych wartości
Metoda SetValue po prostu wstawia nietypową string
wartość przekazaną jako parametr jako wartość węzła XPathNavigator , na który jest obecnie umieszczony obiekt. Wartość jest wstawiana bez żadnego typu lub bez sprawdzania, czy nowa wartość jest prawidłowa zgodnie z typem węzła, jeśli są dostępne informacje o schemacie.
W poniższym przykładzie metoda SetValue służy do aktualizowania wszystkich elementów price
w pliku contosoBooks.xml
.
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)
W przykładzie wykorzystuje się plik contosoBooks.xml
jako dane wejściowe.
<?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>
Wstawianie wpisanych wartości
Gdy typ węzła jest prostym typem schematu XML W3C, nowa wartość wstawiona przez SetTypedValue metodę jest sprawdzana względem aspektów prostego typu przed ustawieniem wartości. Jeśli nowa wartość jest nieprawidłowa zgodnie z typem węzła (na przykład ustawienie wartości -1
elementu, którego typem jest xs:positiveInteger
), powoduje wyjątek.
Poniższy przykład próbuje ustawić wartość elementu price
pierwszego elementu book
w pliku contosoBooks.xml
na wartość DateTime. Ponieważ typ schematu price
XML elementu jest zdefiniowany jako xs:decimal
w contosoBooks.xsd
plikach, powoduje to wyjątek.
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);
W przykładzie wykorzystuje się plik contosoBooks.xml
jako dane wejściowe.
<?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>
Przykład przyjmuje contosoBooks.xsd
również jako dane wejściowe.
<?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>
Właściwości InnerXml i OuterXml
Właściwości InnerXml i OuterXml klasy XPathNavigator zmieniają znacznik XML węzłów, na których obiekt XPathNavigator obecnie się znajduje.
Właściwość InnerXml zmienia znacznik XML węzłów XPathNavigator podrzędnych, na których jest obecnie umieszczony obiekt z analizowaną zawartością danego pliku XML string
. Właściwość OuterXml zmienia znacznik XML zarówno dla węzłów podrzędnych, na których jest aktualnie umieszczony obiekt XPathNavigator, jak i dla samego bieżącego węzła.
Oprócz metod opisanych w tym temacie, właściwości InnerXml i OuterXml mogą służyć do wstawiania węzłów i wartości w dokumencie XML. Aby uzyskać więcej informacji na temat używania właściwości InnerXml i OuterXml do wstawiania węzłów i wartości, zobacz temat Modyfikowanie danych XML przy użyciu klasy XPathNavigator.
Konflikty przestrzeni nazw i xml:lang
Niektóre konflikty związane z zakresem przestrzeni nazw i xml:lang
deklaracji mogą wystąpić podczas wstawiania danych XML przy użyciu metod InsertBefore, InsertAfter, AppendChild i PrependChild klasy XPathNavigator, które przyjmują obiekty XmlReader jako parametry.
Poniżej przedstawiono możliwe konflikty przestrzeni nazw.
Jeśli istnieje przestrzeń nazw w zakresie w XmlReader kontekście obiektu, gdzie prefiks mapowania identyfikatora URI przestrzeni nazw nie znajduje się w XPathNavigator kontekście obiektu, do nowo wstawionego węzła zostanie dodana nowa deklaracja przestrzeni nazw.
Jeśli ten sam identyfikator URI przestrzeni nazw jest obecny zarówno w kontekście obiektu XmlReader, jak i XPathNavigator, ale ma inny prefiks zamapowany w obu kontekstach, nowa deklaracja przestrzeni nazw zostanie dodana do nowo wstawionego węzła, a prefiks i identyfikator URI przestrzeni nazw zostaną pobrane z obiektu XmlReader.
Jeśli ten sam prefiks przestrzeni nazw jest w zakresie zarówno w kontekście obiektu XmlReader, jak i obiektu XPathNavigator, ale w obu kontekstach ma przypisany inny identyfikator URI przestrzeni nazw, do nowo wstawionego węzła zostaje dodana nowa deklaracja przestrzeni nazw. Deklaracja ta ponownie deklaruje ten prefiks, używając identyfikatora URI przestrzeni nazw pobranego z obiektu XmlReader.
Jeśli prefiks oraz identyfikator URI przestrzeni nazw są takie same zarówno w kontekście obiektu XmlReader, jak i obiektu XPathNavigator, do nowo wstawionego węzła nie zostanie dodana żadna nowa deklaracja przestrzeni nazw.
Uwaga / Notatka
Powyższy opis dotyczy również deklaracji przestrzeni nazw z pustym string
prefiksem (na przykład domyślną deklaracją przestrzeni nazw).
Poniżej przedstawiono możliwe xml:lang
konflikty.
Jeśli w kontekście obiektu
xml:lang
istnieje XmlReader atrybut, ale nie istnieje w kontekście obiektu XPathNavigator, dodawany jest atrybutxml:lang
, którego wartość jest pobierana z obiektu XmlReader do nowo wstawionego węzła.Jeśli w zakresie kontekstu zarówno obiektu
xml:lang
, jak i obiektu XmlReader znajduje się atrybut XPathNavigator, ale atrybuty mają różne wartości, atrybutxml:lang
, którego wartość pochodzi z obiektu XmlReader, jest dodawany do nowo utworzonego węzła.Jeśli atrybut
xml:lang
jest w zakresie zarówno kontekstu obiektu XmlReader, jak i kontekstu obiektu XPathNavigator, ale każdy z nich ma tę samą wartość, nowy atrybutxml:lang
nie jest dodawany do nowo wstawionego węzła.Jeśli istnieje
xml:lang
atrybut w zakresie w XPathNavigator kontekście obiektu, ale żaden nie istnieje w XmlReader kontekście obiektu, to żadenxml:lang
atrybut nie zostanie dodany do nowo wstawionego węzła.
Wstawianie węzłów za pomocą narzędzia XmlWriter
Metody używane do wstawiania węzłów równorzędnych, podrzędnych i atrybutów opisanych w sekcji "Wstawianie węzłów i wartości" są przeciążone. Metody InsertAfter, InsertBefore, AppendChild, PrependChild i CreateAttributes klasy XPathNavigator zwracają obiekt XmlWriter używany do wstawiania węzłów.
Nieobsługiwane metody XmlWriter
Nie wszystkie metody używane do pisania informacji w dokumencie XML przy użyciu XmlWriter klasy są obsługiwane przez XPathNavigator klasę ze względu na różnicę między modelem danych XPath a modelem obiektów dokumentów (DOM).
W poniższej tabeli opisano metody klasy XmlWriter, które nie są obsługiwane przez klasę XPathNavigator.
Metoda | Opis |
---|---|
WriteEntityRef | Zgłasza wyjątek NotSupportedException . |
WriteDocType | Ignorowane na poziomie głównym i zgłasza wyjątek, jeśli jest wywoływane na jakimkolwiek innym poziomie w dokumencie XML. |
WriteCData | Traktowane jako wywołanie metody WriteString dla równoważnego znaku lub znaków. |
WriteCharEntity | Traktowane jako wywołanie metody WriteString dla równoważnego znaku lub znaków. |
WriteSurrogateCharEntity | Traktowane jako wywołanie metody WriteString dla równoważnego znaku lub znaków. |
Aby uzyskać więcej informacji na temat klasy, zobacz dokumentację referencyjną XmlWriterXmlWriter klas.
Wiele obiektów XmlWriter
Istnieje możliwość posiadania wielu XPathNavigator obiektów wskazujących na różne części dokumentu XML z co najmniej jednym otwartym XmlWriter obiektem. Wiele XmlWriter obiektów jest dozwolonych i obsługiwanych w scenariuszach jednowątkowych.
Poniżej przedstawiono ważne uwagi, które należy wziąć pod uwagę podczas korzystania z wielu XmlWriter obiektów.
Fragmenty XML zapisywane przez XmlWriter obiekty są dodawane do dokumentu XML po wywołaniu Close metody każdego XmlWriter obiektu. Obiekt XmlWriter do tego momentu zapisuje odłączony fragment. Jeśli na dokumencie XML zostanie wykonana operacja, wszystkie fragmenty zapisywane przez obiekt XmlWriter, przed wywołaniem Close, nie są zmieniane.
Jeśli istnieje otwarty XmlWriter obiekt w określonym poddrzewie XML i to poddrzewo zostanie usunięte, XmlWriter obiekt może nadal zostać dodany do poddrzewa. Poddrzewo po prostu staje się usuniętym fragmentem.
Jeśli wiele XmlWriter obiektów jest otwieranych w tym samym punkcie dokumentu XML, są one dodawane do dokumentu XML w kolejności, w której XmlWriter obiekty są zamknięte, a nie w kolejności, w jakiej zostały otwarte.
Poniższy przykład tworzy obiekt XmlDocument, następnie obiekt XPathNavigator, a potem używa obiektu XmlWriter zwróconego przez metodę PrependChild, aby utworzyć strukturę pierwszej książki w pliku books.xml
. Następnie przykład zapisuje go jako book.xml
plik.
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");
Zapisywanie dokumentu XML
Zapisywanie zmian wprowadzonych w XmlDocument obiekcie w wyniku metod opisanych w tym temacie odbywa się przy użyciu metod XmlDocument klasy. Aby uzyskać więcej informacji na temat zapisywania zmian wprowadzonych w XmlDocument obiekcie, zobacz Zapisywanie i zapisywanie dokumentu.