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í string
objekt , 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í string
objekt , 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.