Bagikan melalui


Menyisipkan data XML menggunakan XPathNavigator

Kelas ini XPathNavigator menyediakan sekumpulan metode yang digunakan untuk menyisipkan simpul saudara, anak, dan atribut dalam dokumen XML. Untuk menggunakan metode ini, XPathNavigator objek harus dapat diedit, artinya, propertinya CanEdit harus true.

XPathNavigator objek yang dapat mengedit dokumen XML dibuat oleh CreateNavigator metode XmlDocument kelas. XPathNavigator Objek yang dibuat oleh kelas XPathDocument bersifat hanya-baca dan setiap upaya untuk menggunakan metode pengeditan dari sebuah objek yang dibuat oleh objek XPathNavigatorXPathDocument mengakibatkan NotSupportedException.

Untuk informasi selengkapnya tentang membuat objek yang dapat diedit XPathNavigator , lihat Membaca Data XML menggunakan XPathDocument dan XmlDocument.

Menyisipkan Simpul

Kelas ini XPathNavigator menyediakan metode untuk menyisipkan simpul saudara, anak, dan atribut dalam dokumen XML. Metode ini memungkinkan Anda menyisipkan simpul dan atribut di lokasi yang berbeda sehubungan dengan posisi XPathNavigator objek saat ini dan dijelaskan di bagian berikut.

Menyisipkan Node Saudara

Kelas XPathNavigator ini menyediakan metode-metode berikut untuk menyisipkan simpul-simpul se-level.

Metode ini menyisipkan simpul saudara sebelum dan sesudah node XPathNavigator di mana objek saat ini berada.

Metode InsertAfter dan InsertBefore kelebihan beban dan menerima stringobjek , XmlReader atau XPathNavigator objek yang berisi simpul saudara untuk ditambahkan sebagai parameter. Kedua metode juga mengembalikan objek XmlWriter yang digunakan untuk menyisipkan node sejenis.

Metode InsertElementAfter dan InsertElementBefore menyisipkan simpul saudara tunggal sebelum dan sesudah simpul yang saat ini diposisikan objek XPathNavigator menggunakan awalan namespace, nama lokal, URI namespace, dan nilai yang ditentukan sebagai parameter.

Dalam contoh berikut, elemen baru pages disisipkan sebelum elemen turunan price dari elemen pertama book dalam file contosoBooks.xml.

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)

Contoh mengambil contosoBooks.xml file sebagai 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>

Untuk informasi selengkapnya tentang InsertAftermetode , InsertBefore, InsertElementAfter dan InsertElementBefore , lihat XPathNavigator dokumentasi referensi kelas.

Menyisipkan Node Anak

Kelas XPathNavigator ini menyediakan metode berikut untuk menyisipkan simpul anak.

Metode ini menambahkan dan menaruh simpul anak di akhir dan di awal dari daftar simpul anak dari simpul di mana objek XPathNavigator saat ini diposisikan.

Seperti metode di bagian "Menyisipkan Simpul Saudara", metode AppendChild dan PrependChild menerima string, objek XmlReader, atau objek XPathNavigator yang berisi simpul anak untuk ditambahkan sebagai parameter. Kedua metode juga mengembalikan objek XmlWriter yang digunakan untuk menyisipkan simpul anak.

Juga seperti metode di bagian "Menyisipkan Simpul Saudara", metode AppendChildElement dan metode PrependChildElement menyisipkan satu simpul anak ke akhir dan ke awal daftar simpul anak dari simpul di mana objek XPathNavigator saat ini diposisikan, menggunakan awalan ruang nama, nama lokal, URI ruang nama, dan nilai yang ditentukan sebagai parameter.

Dalam contoh berikut, elemen anak baru pages ditambahkan ke daftar elemen turunan dari elemen pertama book dalam contosoBooks.xml file.

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)

Contoh mengambil contosoBooks.xml file sebagai 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>

Untuk informasi selengkapnya tentang AppendChildmetode , PrependChild, AppendChildElement dan PrependChildElement , lihat XPathNavigator dokumentasi referensi kelas.

Menyisipkan Node Atribut

Kelas XPathNavigator menyediakan metode berikut untuk menyisipkan node atribut.

Metode ini menyisipkan node atribut pada node elemen tempat XPathNavigator objek saat ini diposisikan. Metode CreateAttribute ini membuat node atribut pada node elemen tempat objek XPathNavigator saat ini diposisikan, menggunakan awalan namespace, nama lokal, URI namespace, dan nilai yang ditentukan sebagai parameter. Metode CreateAttributes mengembalikan objek yang digunakan untuk menyisipkan XmlWriter simpul atribut.

Dalam contoh berikut, atribut discount dan currency baru dibuat pada elemen turunan price dari elemen pertama book dalam file contosoBooks.xml menggunakan objek XmlWriter yang dikembalikan dari metode CreateAttributes.

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)

Contoh mengambil contosoBooks.xml file sebagai 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>

Untuk informasi selengkapnya tentang metode CreateAttribute dan CreateAttributes, lihat dokumentasi referensi kelas XPathNavigator.

Menyalin Simpul

Dalam kasus tertentu Anda mungkin ingin mengisi dokumen XML dengan konten dari dokumen XML lain. XPathNavigator kelas dan XmlWriter kelas dapat menyalin simpul ke XmlDocument objek dari XmlReader objek atau XPathNavigator objek yang ada.

Metode AppendChild, PrependChild, InsertBefore dan InsertAfter kelas XPathNavigator semuanya memiliki kelebihan beban yang dapat menerima XPathNavigator objek atau XmlReader objek sebagai parameter.

Metode WriteNode dari kelas XmlWriter memiliki overload yang dapat menerima objek XmlNode, XmlReader, atau XPathNavigator.

Contoh berikut menyalin semua book elemen dari satu dokumen ke dokumen lainnya.

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");

Menyisipkan Nilai

Kelas XPathNavigator menyediakan SetValue dan SetTypedValue metode untuk menyisipkan nilai untuk simpul ke dalam objek XmlDocument.

Menyisipkan Nilai Tanpa Tipe

Metode SetValue ini hanya menyisipkan nilai yang tidak diketik string yang diteruskan sebagai parameter sebagai nilai simpul XPathNavigator tempat objek saat ini diposisikan. Nilai disisipkan tanpa jenis apa pun atau tanpa memverifikasi bahwa nilai baru valid sesuai dengan jenis simpul jika informasi skema tersedia.

Dalam contoh berikut, SetValue metode ini digunakan untuk memperbarui semua price elemen dalam contosoBooks.xml file.

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)

Contoh mengambil contosoBooks.xml file sebagai 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>

Menyisipkan Nilai yang Diketik

Ketika jenis node adalah jenis sederhana dari Skema XML W3C, nilai baru yang dimasukkan oleh metode SetTypedValue diperiksa dengan faset dari jenis sederhana sebelum nilai ditetapkan. Jika nilai baru tidak valid sesuai dengan jenis simpul (misalnya, mengatur nilai -1 pada elemen yang jenisnya xs:positiveInteger), nilai tersebut menghasilkan pengecualian.

Contoh berikut mencoba mengubah nilai elemen pertama price dalam file book menjadi nilai contosoBooks.xml. Karena jenis Skema XML dari price elemen didefinisikan sebagai xs:decimal dalam contosoBooks.xsd file, ini menghasilkan pengecualian.

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);

Contoh mengambil contosoBooks.xml file sebagai 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>

Contohnya juga mengambil contosoBooks.xsd sebagai input.

<?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>

Properti InnerXml dan OuterXml

Properti InnerXml dan OuterXml dari kelas XPathNavigator mengubah markup XML dari simpul di mana objek XPathNavigator berada saat ini.

Properti InnerXml mengubah markup XML dari simpul anak tempat XPathNavigator objek saat ini diposisikan dengan konten XML string yang diurai. Demikian pula, properti OuterXml mengubah markup XML dari simpul anak yang ditempati objek XPathNavigator saat ini serta simpul saat ini itu sendiri.

Selain metode yang dijelaskan dalam topik ini, InnerXml properti dan OuterXml dapat digunakan untuk menyisipkan simpul dan nilai dalam dokumen XML. Untuk informasi selengkapnya tentang menggunakan InnerXml properti dan OuterXml untuk menyisipkan simpul dan nilai, lihat topik Ubah Data XML menggunakan XPathNavigator .

Konflik Namespace dan xml:lang

Konflik tertentu yang terkait dengan cakupan namespace dan deklarasi xml:lang dapat terjadi saat menyisipkan data XML menggunakan metode InsertBefore, InsertAfter, AppendChild, dan PrependChild dari kelas XPathNavigator yang menggunakan objek XmlReader sebagai parameter.

Berikut ini adalah kemungkinan konflik namespace.

  • Jika ada namespace dalam cakupan pada konteks objek XmlReader, dimana pemetaan awalan ke URI namespace tidak ada dalam konteks objek XPathNavigator, maka deklarasi ruang nama baru ditambahkan ke simpul yang baru disisipkan.

  • Jika URI namespace yang sama dalam cakupan objek XmlReader dan objek XPathNavigator tetapi memiliki awalan yang berbeda yang dipetakan ke dalam konteks masing-masing, deklarasi namespace baru ditambahkan ke simpul baru yang dimasukkan, dengan awalan dan namespace URI diambil dari objek XmlReader.

  • Jika awalan namespace yang sama berada dalam cakupan baik di konteks objek XmlReader maupun di konteks objek XPathNavigator, tetapi memiliki namespace URI yang berbeda yang dipetakan ke keduanya, maka deklarasi namespace baru ditambahkan pada simpul yang baru dimasukkan. Ini menyatakan kembali awalan tersebut dengan URI namespace yang diambil dari objek XmlReader.

  • Jika awalan serta URI namespace dalam XmlReader konteks objek dan XPathNavigator konteks objek sama, tidak ada deklarasi namespace baru yang ditambahkan ke simpul yang baru dimasukkan.

Nota

Deskripsi di atas juga berlaku untuk deklarasi namespace dengan kosong string sebagai awalan (misalnya, deklarasi namespace default).

Berikut adalah kemungkinan konflik xml:lang.

  • Jika ada atribut xml:lang dalam cakupan XmlReader konteks objek tetapi tidak dalam XPathNavigator konteks objek, atribut xml:lang yang nilainya diambil dari objek XmlReader ditambahkan ke simpul yang baru ditambahkan.

  • Jika terdapat atribut xml:lang yang berada dalam cakupan konteks objek XmlReader dan konteks objek XPathNavigator, tetapi masing-masing memiliki nilai yang berbeda, atribut xml:lang dengan nilai yang diambil dari objek XmlReader akan ditambahkan ke simpul yang baru disisipkan.

  • Jika ada xml:lang atribut dalam cakupan XmlReader konteks objek dan XPathNavigator konteks objek, tetapi masing-masing dengan nilai yang sama, atribut baru xml:lang tidak akan ditambahkan pada simpul yang baru dimasukkan.

  • Jika ada xml:lang atribut dalam cakupan XPathNavigator konteks objek, tetapi tidak ada dalam konteks objek XmlReader, atribut xml:lang tidak ditambahkan ke simpul yang baru disisipkan.

Menyisipkan Simpul dengan XmlWriter

Metode yang digunakan untuk menyisipkan simpul saudara, anak, dan atribut yang dijelaskan di bagian "Menyisipkan Simpul dan Nilai" kelebihan beban. Metode InsertAfter, InsertBefore, AppendChild, PrependChild dan CreateAttributes dari kelas XPathNavigator mengembalikan XmlWriter objek yang digunakan untuk menyisipkan simpul.

Metode XmlWriter yang Tidak Didukung

Tidak semua metode yang digunakan untuk menulis informasi ke dokumen XML menggunakan XmlWriter kelas didukung oleh XPathNavigator kelas karena perbedaan antara model data XPath dan Model Objek Dokumen (DOM).

Tabel berikut menjelaskan metode-metode dari kelas XmlWriter yang tidak didukung oleh kelas XPathNavigator.

Metode Deskripsi
WriteEntityRef Melempar pengecualian NotSupportedException.
WriteDocType Diabaikan di tingkat akar dan mengeluarkan pengecualian NotSupportedException jika dipanggil pada tingkat lain dalam dokumen XML.
WriteCData Diperlakukan sebagai pemanggilan metode WriteString untuk karakter yang sepadan.
WriteCharEntity Diperlakukan sebagai pemanggilan metode WriteString untuk karakter yang sepadan.
WriteSurrogateCharEntity Diperlakukan sebagai pemanggilan metode WriteString untuk karakter yang sepadan.

Untuk informasi selengkapnya tentang XmlWriter kelas, lihat XmlWriter dokumentasi referensi kelas.

Beberapa Objek XmlWriter

Dimungkinkan untuk memiliki beberapa XPathNavigator objek yang menunjuk ke bagian yang berbeda dari dokumen XML dengan satu atau beberapa objek terbuka XmlWriter . Beberapa XmlWriter objek diizinkan dan didukung dalam skenario berulir tunggal.

Berikut ini adalah catatan penting yang perlu dipertimbangkan saat menggunakan beberapa XmlWriter objek.

  • Fragmen XML yang ditulis oleh objek XmlWriter ditambahkan ke dokumen XML ketika metode Close dari setiap objek XmlWriter dipanggil. Sampai saat itu, objek XmlWriter sedang menulis potongan yang terputus. Jika operasi dilakukan pada dokumen XML, fragmen apa pun yang XmlWriter ditulis oleh objek, sebelum Close dipanggil, tidak terpengaruh.

  • Jika ada objek terbuka XmlWriter pada sub-pohon XML tertentu dan cabang tersebut dihapus, objek XmlWriter mungkin masih dapat ditambahkan ke sub-pohon tersebut. Subtree hanya menjadi fragmen yang dihapus.

  • Jika beberapa XmlWriter objek dibuka pada titik yang sama dalam dokumen XML, objek ditambahkan ke dokumen XML dalam urutan XmlWriter objek ditutup, bukan dalam urutan pembukaan objek.

Contoh berikut membuat objek XmlDocument, membuat objek XPathNavigator, lalu menggunakan objek XmlWriter yang dikembalikan oleh metode PrependChild untuk membentuk struktur buku pertama dari berkas books.xml. Contoh kemudian menyimpannya sebagai book.xml file.

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");

Menyimpan Dokumen XML

Menggunakan metode dari kelas XmlDocument untuk menyimpan perubahan yang dilakukan pada objek XmlDocument sebagai hasil dari metode yang dijelaskan dalam topik ini. Untuk informasi selengkapnya tentang menyimpan perubahan yang XmlDocument dilakukan pada objek, lihat Menyimpan dan Menulis Dokumen.

Lihat juga