Sdílet prostřednictvím


Vložení dat XML pomocí XPathNavigator

Třída XPathNavigator poskytuje sadu metod, které slouží k vložení uzlů na stejné úrovni, podřízených a atributů 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. XPathNavigatorobjekty vytvořené XPathDocument třídou jsou jen pro čtení a všechny pokusy o použití metod úprav objektu XPathNavigator vytvořeného objektem XPathDocument výsledkem .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í uzlů na stejné úrovni, podřízených a atributů 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í uzlů na stejné úrovni

Třída XPathNavigator poskytuje následující metody pro vložení uzlů na stejné úrovni.

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

Tyto InsertAfter metody InsertBefore jsou přetíženy a přijímají stringobjekt , XmlReader objekt nebo XPathNavigator objekt obsahující uzel na stejné úrovni přidat jako parametry. Obě metody také vrací XmlWriter objekt použitý k vložení uzlů na stejné úrovni.

InsertElementBefore Metody InsertElementAfter vloží jeden uzel na stejné úrovni před a za uzelXPathNavigator, na který je objekt aktuálně umístěn pomocí předpony oboru názvů, místního názvu, identifikátoru 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 = gcnew 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);
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>

Další informace o InsertAfter, InsertBeforeInsertElementAfter a InsertElementBefore metody naleznete v XPathNavigator referenční dokumentaci třídy.

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í podřízené uzly na konec a na začátek seznamu podřízených uzlů uzlu XPathNavigator , na které je objekt aktuálně umístěn.

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

Podobně jako metody v části AppendChildElement Vložení uzlů na stejné úrovni a PrependChildElement metody vloží jeden podřízený uzel na konec a začátek seznamu podřízených uzlů uzlu XPathNavigator , na který je objekt aktuálně umístěn pomocí předpony oboru názvů, místního názvu, identifikátoru URI oboru názvů a hodnoty určené 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 = gcnew 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);
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>

Další informace o AppendChild, PrependChildAppendChildElement a PrependChildElement metody naleznete v XPathNavigator referenční dokumentaci třídy.

Vkládání uzlů atributů

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

Tyto metody vkládají uzly atributů na uzel prvku, na který XPathNavigator je objekt aktuálně umístěn. Metoda CreateAttribute vytvoří uzel atributu na uzlu elementu XPathNavigator , objekt je nyní umístěn pomocí předpony oboru názvů, místního názvu, identifikátoru URI oboru 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é discount a currency atributy vytvořeny na price podřízený prvek prvního book elementu contosoBooks.xml v souboru pomocí objektu XmlWriter vráceného CreateAttributes z metody.

XmlDocument^ document = gcnew 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);
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 najdete CreateAttributes v XPathNavigator referenční dokumentaci ke třídě.

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.

, AppendChildPrependChildInsertBefore a InsertAfter metody XPathNavigator třídy mají přetížení, které mohou přijmout XPathNavigator objekt nebo XmlReader objekt jako parametr.

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 = gcnew XmlDocument();
document->Load("contosoBooks.xml");
XPathNavigator^ navigator = document->CreateNavigator();

XmlNamespaceManager^ manager = gcnew XmlNamespaceManager(navigator->NameTable);
manager->AddNamespace("bk", "http://www.contoso.com/books");

for each (XPathNavigator^ nav in navigator->Select("//bk:price", manager))
{
    if(nav->Value == "11.99")
    {
        nav->SetValue("12.99");
    }
}

Console::WriteLine(navigator->OuterXml);
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

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

Vlastnost InnerXml změní kód XML podřízených XPathNavigator uzlů objekt je nyní umístěn s parsovaným obsahem daného XML string. OuterXml Podobně vlastnost změní kód XML podřízených XPathNavigator uzlů, na které je objekt aktuálně umístěn, stejně jako aktuální uzel samotný.

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 oborů názvů 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, AppendChildInsertAftera PrependChild metod XPathNavigator třídy, které přebírají XmlReader objekty jako parametry.

Níže jsou uvedené možné konflikty oborů názvů.

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

  • Pokud je stejný identifikátor URI oboru názvů v rámci XmlReader kontextu objektu i XPathNavigator kontextu objektu, ale má na něj v obou kontextech namapovanou 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ým 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 je předpona i identifikátor URI oboru názvů v XmlReader kontextu objektu i XPathNavigator kontextu objektu 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 xml:lang atribut v oboru v XmlReader kontextu objektu, ale ne v XPathNavigator kontextu objektu, atribut, xml:lang jehož hodnota je převzata z objektu XmlReader , se přidá do nově vloženého uzlu.

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

  • Pokud je xml:lang v kontextu XmlReader objektu i XPathNavigator kontextu objektu atribut v oboru, ale každý se stejnou hodnotou, na nově vložený uzel se nepřidá žádný nový xml:lang atribut.

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

Vkládání uzlů pomocí objektu XmlWriter

Metody používané k vložení uzlů na stejné úrovni, podřízených uzlů a uzlů atributů popsaných v části Vložení uzlů a hodnot jsou přetížené. , InsertAfter, InsertBeforeAppendChildPrependChild a CreateAttributes metody XPathNavigator třídy vrací XmlWriter objekt 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 NotSupportedException Vyvolá 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í WriteString metody pro ekvivalentní znak nebo znaky.
WriteCharEntity Považováno za volání WriteString metody pro ekvivalentní znak nebo znaky.
WriteSurrogateCharEntity Považováno za volání WriteString metody 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í, XmlWriter může se objekt stále přidat do podsložky. Podstrom se jednoduše stane odstraněným fragmentem.

  • 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é