Vložení dat XML pomocí XPathNavigatoru

Třída XPathNavigator poskytuje sadu metod, které slouží k vložení sousedních, podřízených a atributových uzlů v dokumentu XML. Aby bylo možné tyto metody použít, XPathNavigator musí být objekt upravitelný, to znamená, že jeho CanEdit vlastnost musí být true.

XPathNavigator objekty, které mohou upravovat dokument XML jsou vytvořeny CreateNavigator metodou XmlDocument třídy. XPathNavigator objekty vytvořené třídou XPathDocument jsou jen pro čtení a jakýkoli pokus použít editační metody objektu XPathNavigator vytvořeného objektem XPathDocument vyústí ve NotSupportedException.

Další informace o vytváření upravitelných XPathNavigator objektů naleznete v tématu Čtení dat XML pomocí XPathDocument a XmlDocument.

Vkládání uzlů

Třída XPathNavigator poskytuje metody pro vložení sourozeneckých, podřízených a atributových uzlů v dokumentu XML. Tyto metody umožňují vložit uzly a atributy do různých umístění ve vztahu k aktuální pozici XPathNavigator objektu a jsou popsány v následujících částech.

Vkládání sourozeneckých uzlů

Třída XPathNavigator poskytuje následující metody pro vložení sousledných uzlů.

Tyto metody vloží uzly na stejné úrovni před a za uzel, na kterém je objekt XPathNavigator právě umístěn.

Metody InsertAfter a InsertBefore jsou přetížené a přijímají objekt string, objekt XmlReader nebo objekt XPathNavigator, který obsahuje uzel na stejné úrovni pro přidání jako parametr. Obě metody také vrací objekt XmlWriter použitý k vložení sousedních uzlů.

Metody InsertElementAfter a InsertElementBefore vloží jednotlivý uzel na stejné úrovni před a za uzlem, na kterém je aktuálně umístěn objekt XPathNavigator, použitím předpony oboru názvů, místního názvu, URI oboru názvů a hodnoty zadané jako parametry.

V následujícím příkladu je vložen nový pages prvek před price podřízený prvek prvního book prvku v contosoBooks.xml souboru.

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)

Příklad vezme contosoBooks.xml soubor jako vstup.

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

Nejvíce k metodám InsertAfter, InsertBefore, InsertElementAfter a InsertElementBefore naleznete v referenční dokumentaci třídy XPathNavigator.

Vkládání podřízených uzlů

Třída XPathNavigator poskytuje následující metody pro vložení podřízených uzlů.

Tyto metody připojují a přidávají podřízené uzly na konec a na začátek seznamu podřízených uzlů na uzlu, na kterém je objekt XPathNavigator aktuálně umístěn.

Podobně jako metody v části "Vložení uzlů na stejné úrovni" přijímají metody AppendChild a PrependChild jako parametry string objekt, XmlReader objekt nebo XPathNavigator objekt obsahující podřízený uzel, který se má přidat. Obě metody také vrací XmlWriter objekt použitý k vložení podřízených uzlů.

Podobně jako metody v části „Vložení uzlů na stejné úrovni“, metody AppendChildElement a PrependChildElement vloží jeden podřízený uzel na konec a začátek seznamu podřízených uzlů uzlu, na který je XPathNavigator objekt aktuálně umístěn, a to s použitím předpony oboru názvů, místního názvu, URI oboru názvů a hodnoty, jež jsou specifikovány jako parametry.

V následujícím příkladu je nový pages podřízený prvek připojen k seznamu podřízených elementů prvního book prvku v contosoBooks.xml souboru.

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)

Příklad vezme contosoBooks.xml soubor jako vstup.

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

Nejvíce k metodám AppendChild, PrependChild, AppendChildElement a PrependChildElement naleznete v referenční dokumentaci třídy XPathNavigator.

Vkládání uzlů atributů

Třída XPathNavigator poskytuje následující metody pro vložení uzlů atributů.

Tyto metody vkládají uzly atributů do uzlu prvku, na kterém je objekt XPathNavigator aktuálně umístěn. Metoda CreateAttribute vytvoří uzel atributu na uzlu elementu, na kterém je aktuálně umístěn objekt XPathNavigator, pomocí předpony prostoru názvů, místního názvu, URI prostoru názvů a hodnoty zadané jako parametry. Metoda CreateAttributes vrátí XmlWriter objekt použitý k vložení uzlů atributů.

V následujícím příkladu jsou nové atributy discount a currency vytvořeny na podřízeném prvku price prvního prvku book v souboru contosoBooks.xml pomocí objektu XmlWriter, který je vrácen z metody 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)

Příklad vezme contosoBooks.xml soubor jako vstup.

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

Další informace o metodách CreateAttribute a CreateAttributes naleznete v referenční dokumentaci ke třídě XPathNavigator.

Kopírování uzlů

V některých případech můžete chtít naplnit dokument XML obsahem z jiného dokumentu XML. Třída XPathNavigator i XmlWriter třída mohou kopírovat uzly do objektu XmlDocument z existujícího XmlReader objektu nebo XPathNavigator objektu.

Metody AppendChild třídy PrependChild, InsertBefore, InsertAfter a XPathNavigator mají přetížení, které může přijmout jako parametr objekt XPathNavigator nebo objekt XmlReader.

Metoda WriteNodeXmlWriter třídy má přetížení, které mohou přijmout XmlNode, XmlReadernebo XPathNavigator objekt.

Následující příklad zkopíruje všechny book prvky z jednoho dokumentu do druhého.

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

Vkládání hodnot

Třída XPathNavigator poskytuje SetValue a SetTypedValue metody pro vložení hodnot pro uzel do objektu XmlDocument .

Vkládání netypových hodnot

Metoda SetValue jednoduše vloží nezatypovanou hodnotu předanou string jako parametr jako hodnotu uzlu XPathNavigator , na který je objekt aktuálně umístěn. Hodnota se vloží bez jakéhokoli typu nebo bez ověření, zda je nová hodnota platná podle typu uzlu, pokud jsou k dispozici informace o schématu.

V následujícím příkladu se SetValue metoda používá k aktualizaci všech price prvků v contosoBooks.xml souboru.

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)

Příklad vezme contosoBooks.xml soubor jako vstup.

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

Vkládání zadaných hodnot

Pokud je typ uzlu jednoduchý typ schématu W3C XML, nová hodnota vložená metodou SetTypedValue je kontrolována proti omezujícím vlastnostem jednoduchého typu před nastavením hodnoty. Pokud nová hodnota není platná podle typu uzlu (například nastavení hodnoty -1 prvku, jehož typ je xs:positiveInteger), výsledkem je výjimka.

Následující příklad se pokusí změnit hodnotu price prvku prvního book prvku v contosoBooks.xml souboru na DateTime hodnotu. Vzhledem k tomu, že typ schématu XML elementu price je definován jako xs:decimal v contosoBooks.xsd souborech, výsledkem je výjimka.

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

Příklad vezme contosoBooks.xml soubor jako vstup.

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

Příklad také přebírá contosoBooks.xsd jako vstup.

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

Vlastnosti InnerXml a OuterXml

Vlastnosti InnerXml a OuterXml třídy XPathNavigator mění XML kód uzlů, na kterých je objekt XPathNavigator aktuálně umístěn.

Vlastnost InnerXml změní kód XML u podřízených uzlů, na nichž je objekt XPathNavigator aktuálně umístěn, pomocí parsovaného obsahu zadaného XML string. Podobně vlastnost OuterXml změní značky XML podřízených uzlů XPathNavigator, na které je objekt aktuálně umístěn, stejně jako samotný aktuální uzel.

Kromě metod popsaných v tomto tématu InnerXml lze tyto vlastnosti OuterXml použít k vložení uzlů a hodnot do dokumentu XML. Další informace o použití InnerXml a OuterXml vlastností k vložení uzlů a hodnot naleznete v tématu Úprava dat XML pomocí XPathNavigator .

Konflikty jmenných prostorů a xml:lang

K určitým konfliktům souvisejícím s oborem názvů a xml:lang deklarací může dojít při vkládání dat XML pomocí InsertBefore, InsertAfterAppendChilda PrependChild metod XPathNavigator třídy, které přebírají XmlReader objekty jako parametry.

Níže jsou uvedené možné konflikty jmenných prostorů.

  • Pokud je v rámci XmlReader objektu obor názvů ve skopii, kde není mapování předpony k URI oboru názvů v XPathNavigator kontextu objektu, přidá se nová deklarace oboru názvů do nově vloženého uzlu.

  • Pokud je stejný identifikátor URI oboru názvů v dosahu jak v kontextu objektu XmlReader, tak XPathNavigator, ale má k němu v obou kontextech přiřazenu jinou předponu, přidá se do nově vloženého uzlu nová deklarace oboru názvů s předponou a identifikátorem URI oboru názvů převzatými z objektu XmlReader.

  • Pokud je stejná předpona oboru názvů v rámci XmlReader kontextu objektu i XPathNavigator kontextu objektu, ale má na něj v obou kontextech namapovaný jiný identifikátor URI oboru názvů, přidá se do nově vloženého uzlu nová deklarace oboru názvů, která tuto předponu znovu deklaruje identifikátorem URI oboru názvů převzatým z XmlReader objektu.

  • Pokud jsou předpona a URI oboru názvů v kontextu objektu XmlReader i XPathNavigator stejné, do nově vloženého uzlu se nepřidá žádná nová deklarace oboru názvů.

Poznámka:

Výše uvedený popis platí také pro deklarace oboru názvů s prázdnou string předponou (například výchozí deklarace oboru názvů).

Následující jsou možné xml:lang konflikty.

  • Pokud je atribut xml:lang v kontextu objektu XmlReader v oboru, ale není v kontextu objektu XPathNavigator, přidá se do nově vloženého uzlu atribut xml:lang, jehož hodnota je převzata z objektu XmlReader.

  • Pokud je atribut xml:lang v oboru jak v kontextu objektu XmlReader, tak v kontextu objektu XPathNavigator, ale každý z nich má jinou hodnotu, pak se k nově vloženému uzlu přidá atribut xml:lang, jehož hodnota je převzata z objektu XmlReader.

  • Pokud je atribut xml:lang v dosahu v kontextu objektu XmlReader i objektu XPathNavigator a oba mají stejnou hodnotu, na nově vložený uzel se nepřidá žádný nový xml:lang atribut.

  • Pokud je xml:lang atribut v oboru kontextu objektu XPathNavigator a v kontextu objektu XmlReader žádný takový atribut neexistuje, nepřidá se do nově vloženého uzlu žádný xml:lang atribut.

Vložení uzlů pomocí XmlWriter

Metody používané k vložení sourozeneckých, dětských a atributových uzlů jsou přetížené, jak je popsáno v části 'Vložení uzlů a hodnot'. Metody InsertAfter, InsertBefore, AppendChild, PrependChild a CreateAttributes třídy XPathNavigator vrací objekt XmlWriter použitý k vložení uzlů.

Nepodporované metody XmlWriter

Ne všechny metody používané k zápisu informací do dokumentu XML pomocí XmlWriter třídy jsou podporovány XPathNavigator třídou kvůli rozdílu mezi datovým modelem XPath a modelem DOM (Document Object Model).

Následující tabulka popisuje XmlWriter metody třídy, které XPathNavigator třída nepodporuje.

Metoda Popis
WriteEntityRef Vyvolá NotSupportedException výjimku.
WriteDocType Ignorováno na kořenové úrovni a vyvolá NotSupportedException výjimku, pokud je volána na jakékoli jiné úrovni v dokumentu XML.
WriteCData Považováno za volání metody WriteString pro ekvivalentní znak nebo znaky.
WriteCharEntity Považováno za volání metody WriteString pro ekvivalentní znak nebo znaky.
WriteSurrogateCharEntity Považováno za volání metody WriteString pro ekvivalentní znak nebo znaky.

Další informace o XmlWriter třídě najdete v XmlWriter referenční dokumentaci ke třídě.

Více objektů XmlWriter

Je možné mít více XPathNavigator objektů odkazující na různé části dokumentu XML s jedním nebo více otevřenými XmlWriter objekty. Ve scénářích s jedním vláknem je povoleno a podporováno více XmlWriter objektů.

Při použití více XmlWriter objektů je potřeba vzít v úvahu následující důležité poznámky.

  • Fragmenty XML zapsané XmlWriter objekty jsou přidány do dokumentu XML při Close zavolání metody každého XmlWriter objektu. Do té doby objekt XmlWriter zapisuje odpojený fragment. Pokud je operace provedena v dokumentu XML, všechny fragmenty zapsané objektem XmlWriter před Close zavoláním nejsou ovlivněny.

  • Pokud je na konkrétním podstromu XML otevřený XmlWriter objekt a tento podstrom se odstraní, objekt XmlWriter se může stále přidat do podstromu. Podstrom se jednoduše změní na odstraněný fragment.

  • Pokud je v dokumentu XML otevřeno více XmlWriter objektů ve stejném okamžiku, přidají se do dokumentu XML v pořadí, v jakém XmlWriter jsou objekty zavřeny, nikoli v pořadí, ve kterém byly otevřeny.

Následující příklad vytvoří XmlDocument objekt, vytvoří XPathNavigator objekt a pak použije XmlWriter objekt vrácený PrependChild metodou k vytvoření struktury první knihy v books.xml souboru. Příklad ho pak uloží jako book.xml soubor.

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

Uložení dokumentu XML

Uložení změn provedených v objektu XmlDocument v důsledku metod popsaných v tomto tématu se provádí pomocí metod XmlDocument třídy. Další informace o ukládání změn provedených v objektu XmlDocument naleznete v tématu Ukládání a zápis dokumentu.

Viz také