Aracılığıyla paylaş


XPathNavigator kullanarak XML verileri ekleme

sınıfı, XPathNavigator XML belgesine eşdüzey, alt ve öznitelik düğümleri eklemek için kullanılan bir yöntem kümesi sağlar. Bu yöntemleri kullanabilmek için nesnenin XPathNavigator düzenlenebilir olması, yani özelliğinin CanEdit olması truegerekir.

XPathNavigator sınıfının CreateNavigator yöntemi tarafından oluşturulan XmlDocument XML belgesini düzenleyebilen nesnelerdir. XPathNavigator sınıfı tarafından XPathDocument oluşturulan nesneler salt okunur durumundadır ve XPathNavigator nesnesi tarafından oluşturulan bir XPathDocument nesnenin düzenleme yöntemlerini kullanma girişimleri bir NotSupportedException ile sonuçlanıyor.

Düzenlenebilir XPathNavigator nesneler oluşturma hakkında daha fazla bilgi için bkz. XPathDocument ve XmlDocument kullanarak XML Verilerini Okuma.

Düğüm Ekleme

The XPathNavigator sınıfı, bir XML belgesine eşdüzey, alt ve öznitelik düğümleri eklemek için yöntemler sağlar. Bu yöntemler, bir XPathNavigator nesnenin geçerli konumuyla ilişkili olarak farklı konumlara düğümler ve öznitelikler eklemenize olanak sağlar ve aşağıdaki bölümlerde açıklanmıştır.

Eşdüzey Düğüm Ekleme

XPathNavigator sınıf, kardeş düğümleri eklemek için aşağıdaki yöntemleri sağlar.

Bu yöntemler, bir XPathNavigator nesnenin şu anda bulunduğu düğümden önce ve sonra eşdüzey düğümler ekler.

InsertAfter ve InsertBefore yöntemleri aşırı yüklenir ve parametre olarak eklenecek eşdüzey düğümü içeren bir string, XmlReader nesnesi veya XPathNavigator nesnesini kabul eder. Her iki yöntem de eşdüzey düğümleri eklemek için kullanılan bir XmlWriter nesne döndürür.

InsertElementAfter ve InsertElementBefore yöntemleri, XPathNavigator nesnesinin şu anda konumlandığı düğümün önüne ve arkasına, parametre olarak belirtilen ad alanı ön eki, yerel ad, ad alanı URI'si ve değeri kullanarak tek bir eşdüzey düğüm ekler.

Aşağıdaki örnekte, pages dosyasındaki ilk price öğenin alt öğesi book önüne yeni bir contosoBooks.xml öğesi eklenir.

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)

Örnek, contosoBooks.xml dosyasını giriş olarak alır.

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

Daha fazla bilgi için InsertAfter, InsertBefore, InsertElementAfter ve InsertElementBefore yöntemlerine sınıf başvuru belgelerinde XPathNavigator bakın.

Çocuk Düğümleri Eklemek

Bu sınıf, XPathNavigator alt düğümleri eklemek için aşağıdaki yöntemleri sağlar.

Bu yöntemler, bir XPathNavigator nesnesinin şu anda konumlandığı düğümün alt düğüm listesinin sonuna ya da başına alt düğüm ekler.

"Eşdüzey Düğüm Ekleme" bölümündeki AppendChild yöntemler gibi ve PrependChild yöntemleri de parametre olarak eklenecek alt düğümü içeren bir string, XmlReader nesnesini veya XPathNavigator nesnesini kabul eder. Her iki yöntem de alt düğümleri eklemek için kullanılan bir XmlWriter nesne döndürür.

"Eşdüzey Düğüm Ekleme" bölümündeki yöntemlere benzer şekilde AppendChildElement ve PrependChildElement yöntemleri, XPathNavigator nesnesinin şu anda konumlandığı düğümün alt düğüm listesinin sonuna ve başına, parametre olarak belirtilen ad alanı ön eki, yerel ad, ad alanı URI'si ve değeri kullanarak tek bir alt düğüm ekler.

Aşağıdaki örnekte, dosyadaki ilk pages öğenin alt öğeleri listesine yeni book bir alt öğe contosoBooks.xml eklenir.

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)

Örnek, contosoBooks.xml dosyasını giriş olarak alır.

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

Daha fazla bilgi için AppendChild, PrependChild, AppendChildElement ve PrependChildElement yöntemlerine sınıf başvuru belgelerinde XPathNavigator bakın.

Öznitelik Düğümleri Ekleme

sınıfı öznitelik XPathNavigator düğümleri eklemek için aşağıdaki yöntemleri sağlar.

Bu yöntemler, bir XPathNavigator nesnenin şu anda konumlandırılmış olduğu öğe düğümüne öznitelik düğümleri ekler. CreateAttribute yöntemi, bir nesnenin şu anda konumlandığı öğe düğümünde, ad alanı ön eki, yerel ad, ad alanı URI'si ve değer gibi parametrelerle belirtilen bilgileri kullanarak bir XPathNavigator öznitelik düğümü oluşturur. yöntemi, CreateAttributes öznitelik düğümlerini eklemek için kullanılan bir XmlWriter nesne döndürür.

Aşağıdaki örnekte, discount yönteminden döndürülen currency nesnesi kullanılarak, price dosyasındaki ilk book öğesinin contosoBooks.xml alt öğesinde yeni XmlWriter ve CreateAttributes öznitelikleri oluşturulur.

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)

Örnek, contosoBooks.xml dosyasını giriş olarak alır.

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

CreateAttribute ve CreateAttributes yöntemleri hakkında daha fazla bilgi için XPathNavigator sınıfı başvuru belgelerine bakın.

Düğümleri Kopyalama

Bazı durumlarda, bir XML belgesini başka bir XML belgesinin içeriğiyle doldurmak isteyebilirsiniz. XPathNavigator ve XmlWriter sınıfları, var olan bir XmlDocument nesneden veya XmlReader nesneden bir XPathNavigator nesneye düğümleri kopyalayabilir.

AppendChild, PrependChild, InsertBefore ve InsertAfter yöntemlerinin tümü, XPathNavigator sınıfında, bir XPathNavigator nesnesini veya bir XmlReader nesnesini parametre olarak kabul eden aşırı yüklemelere sahiptir.

WriteNode sınıfının yöntemiXmlWriter, bir XmlNode, XmlReaderveya XPathNavigator nesnesini kabul edebilen aşırı yüklemelere sahiptir.

Aşağıdaki örnek, tüm book öğeleri bir belgeden diğerine kopyalar.

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

Değer Ekleme

XPathNavigator sınıfı, bir düğüm için değerleri bir SetValue nesneye eklemek amacıyla SetTypedValue ve XmlDocument yöntemlerini sağlar.

Yazılmamış Değerler Ekleme

SetValue yöntemi, parametre olarak geçirilen yazılmamış string değerini, XPathNavigator nesnesinin şu anda konumlandırıldığı düğümün değeri olarak ekler. Değer, herhangi bir tür olmadan veya şema bilgileri varsa yeni değerin düğümün türüne göre geçerli olduğunu doğrulamadan eklenir.

Aşağıdaki örnekte, SetValue yöntemi, price dosyasındaki tüm contosoBooks.xml öğelerini güncellemek için kullanılır.

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)

Örnek, contosoBooks.xml dosyasını giriş olarak alır.

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

Yazılan Değerleri Ekleme

Bir düğümün türü bir W3C XML Şeması basit türü olduğunda, SetTypedValue yöntemi tarafından eklenen yeni değer, değer ayarlanmadan önce basit türün kısıtlamalarına göre kontrol edilir. Yeni değer düğümün türüne göre geçerli değilse (örneğin, türü -1olan bir öğede değerini xs:positiveInteger ayarlama), bir özel durumla sonuçlanır.

Aşağıdaki örnek, price dosyasındaki ilk book öğesinin contosoBooks.xml değerini bir DateTime değeri olarak değiştirmeyi dener. price öğesinin XML Şema türü, xs:decimal dosyalarında contosoBooks.xsd olarak tanımlandığından, bu bir özel durumla sonuçlanır.

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

Örnek, contosoBooks.xml dosyasını giriş olarak alır.

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

Örnek, contosoBooks.xsd öğesini de giriş olarak alır.

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

InnerXml ve OuterXml Özellikleri

InnerXml sınıfının ve OuterXml özellikleri, bir XPathNavigator nesnenin XPathNavigator şu anda konumlandırılmış olduğu düğümlerin XML işaretlemesini değiştirir.

InnerXml özelliği, XPathNavigator nesnesinin şu anda üzerinde konumlandırıldığı alt düğümlerin XML işaretlemesini, verilen XML'nin ayrıştırılmış string içeriğiyle değiştirir. Benzer şekilde, OuterXml özelliği hem XPathNavigator nesnesinin şu anda bulunduğu alt düğümlerin XML işaretlemesini hem de geçerli düğümün kendisini değiştirir.

Bu konuda açıklanan yöntemlere ek olarak, InnerXml ve OuterXml özellikleri bir XML belgesine düğüm ve değer eklemek için kullanılabilir. düğümleri ve değerleri eklemek için ve InnerXml özelliklerini kullanma OuterXml hakkında daha fazla bilgi için XPathNavigator kullanarak XML Verilerini Değiştirme konusuna bakın.

Ad alanı ve xml:lang Çakışmaları

XML verileri eklerken, xml:lang nesnelerini parametre olarak alan InsertBefore sınıfının InsertAfter, AppendChild, PrependChild ve XPathNavigator yöntemlerini kullanırken ad alanı kapsamı ve XmlReader bildirimleriyle ilgili bazı çakışmalar oluşabilir.

Olası ad alanı çakışmaları aşağıdadır.

  • Eğer bir ad alanı, XmlReader nesnesinin bağlamında kapsam içindeyse ancak ön ek ile ad alanı URI eşlemesi XPathNavigator nesnesinin bağlamında değilse, yeni eklenen düğüme yeni bir ad alanı bildirimi eklenir.

  • Aynı ad alanı URI'si hem XmlReader nesnesinin bağlamında hem de XPathNavigator nesnesinin bağlamında kapsam içindeyse, ancak her iki bağlamda da buna eşlenmiş farklı bir ön eke sahipse, yeni eklenen düğüme, XmlReader nesnesinden alınan ön ek ve ad alanı URI'siyle yeni bir ad alanı bildirimi eklenir.

  • Aynı ad alanı ön eki hem nesnenin XmlReader bağlamında hem de nesnenin bağlamında XPathNavigator kapsam içindeyse, ancak her iki bağlamda da buna eşlenmiş farklı bir ad alanı URI'sine sahipse, yeni eklenen düğüme bu ön eki nesneden XmlReader alınan ad alanı URI'siyle yeniden bildiren yeni bir ad alanı bildirimi eklenir.

  • Hem XmlReader nesnesinin bağlamında hem de XPathNavigator nesnesinin bağlamında, ön ek ve ad alanı URI'si aynıysa, yeni eklenen düğüme yeni bir ad alanı bildirimi eklenmez.

Uyarı

Yukarıdaki açıklama, ön ek olarak boş string olan ad alanı bildirimleri için de geçerlidir (örneğin, varsayılan ad alanı bildirimi).

Olası xml:lang çakışmalar aşağıdadır.

  • Eğer xml:lang nesnesinin bağlamı içinde bir XmlReader öznitelik varsa ancak XPathNavigator nesnesinin bağlamında yoksa, değeri xml:lang nesnesinden alınan bir XmlReader öznitelik yeni eklenen düğüme eklenir.

  • Hem xml:lang nesnesinin bağlamında hem de XmlReader nesnesinin bağlamında kapsam içinde bir xml:lang öznitelik varsa, ancak her birinin farklı bir değeri varsa, değeri xml:lang nesnesinden alınan bir XmlReader öznitelik yeni eklenen düğüme eklenir.

  • Eğer hem xml:lang nesnesinin bağlamında hem de XmlReader nesnesinin bağlamında kapsam dahilinde bir XPathNavigator öznitelik varsa ve her ikisi de aynı değere sahipse, yeni eklenen düğüme yeni bir xml:lang öznitelik eklenmez.

  • xml:lang nesnesinin bağlamında kapsam içinde bir XPathNavigator öznitelik varsa, ancak XmlReader nesnesinin bağlamında yoksa, yeni eklenen düğüme bir xml:lang öznitelik eklenmez.

XmlWriter ile Düğüm Ekleme

"Düğümler ve Değerler Ekleme" bölümünde açıklanan eşdüzey, alt ve öznitelik düğümlerini eklemek için kullanılan yöntemler aşırı yüklenmiştir. InsertAftersınıfının , InsertBefore, AppendChildve PrependChildCreateAttributes yöntemleri XPathNavigator düğüm eklemek için kullanılan bir XmlWriter nesne döndürür.

Desteklenmeyen XmlWriter Yöntemleri

XPath veri modeli ile Belge Nesne Modeli (DOM) arasındaki fark nedeniyle, sınıfı kullanarak XmlWriter bir XML belgesine bilgi yazmak için kullanılan yöntemlerin tümü sınıf tarafından XPathNavigator desteklenmez.

Aşağıdaki tabloda sınıf tarafından XmlWriter desteklenmeyen XPathNavigator sınıf yöntemleri açıklanmaktadır.

Yöntem Açıklama
WriteEntityRef Özel durum NotSupportedException oluşturur.
WriteDocType Kök düzeyinde yoksayılır ve XML belgesinde başka bir düzeyde çağrılırsa bir NotSupportedException istisna fırlatır.
WriteCData Eşdeğer karakter veya karakterler için WriteString yöntemine bir çağrı olarak değerlendirilir.
WriteCharEntity Eşdeğer karakter veya karakterler için WriteString yöntemine bir çağrı olarak değerlendirilir.
WriteSurrogateCharEntity Eşdeğer karakter veya karakterler için WriteString yöntemine bir çağrı olarak değerlendirilir.

Sınıf hakkında XmlWriter daha fazla bilgi için sınıf başvurusu belgelerine XmlWriter bakın.

Birden Çok XmlWriter Nesnesi

Bir veya daha fazla açık XPathNavigator nesne içeren xml belgesinin farklı bölümlerine işaret eden birden çok XmlWriter nesne olması mümkündür. Tek iş parçacıklı senaryolarda birden çok XmlWriter nesneye izin verilip desteklenir.

Aşağıda, birden çok XmlWriter nesne kullanılırken dikkate alınması gereken önemli notlar yer alır.

  • XmlWriter nesneleri tarafından yazılmış olan XML parçaları, her Close nesnesinin XmlWriter yöntemi çağrıldığında XML belgesine eklenir. Bu noktaya kadar XmlWriter nesnesi bağlantısı kesilmiş bir parçayı yazıyor. XML belgesinde bir işlem gerçekleştirilirse, XmlWriter nesnesi tarafından yazılan parçalar, Close çağrılmadan önce etkilenmez.

  • Belirli bir XML alt ağacında açık XmlWriter bir nesne varsa ve bu alt ağaç silinirse, XmlWriter nesne yine de alt ağaca eklenebilir. Alt ağaç basitçe silinmiş bir parçaya dönüşür.

  • XML belgesinde aynı noktada birden çok XmlWriter nesne açılırsa, xml belgesine nesnelerin açıldığı sırayla değil, kapatıldığı XmlWriter sırayla eklenir.

Aşağıdaki örnek bir XmlDocument nesne oluşturur, bir XPathNavigator nesne oluşturur ve ardından XmlWriter yöntemi tarafından döndürülen PrependChild nesnesini kullanarak books.xml dosyasındaki ilk kitabın yapısını oluşturur. Örnek daha sonra book.xml olarak dosya kaydeder.

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

XML Belgesini Kaydetme

Bu konuda açıklanan yöntemlerin sonucu olarak bir XmlDocument nesnede yapılan değişiklikleri kaydetmek sınıfının yöntemleri XmlDocument kullanılarak gerçekleştirilir. Nesnede XmlDocument yapılan değişiklikleri kaydetme hakkında daha fazla bilgi için bkz. Belge Kaydetme ve Yazma.

Ayrıca bakınız