Infoga XML-data med XPathNavigator
Klassen XPathNavigator innehåller en uppsättning metoder som används för att infoga noder för syskon, underordnade noder och attribut i ett XML-dokument. För att kunna använda dessa metoder XPathNavigator måste objektet vara redigerbart, dvs. dess CanEdit egenskap måste vara true
.
XPathNavigator objekt som kan redigera ett XML-dokument skapas med CreateNavigator metoden för XmlDocument klassen. XPathNavigator objekt som XPathDocument skapats av klassen är skrivskyddade och alla försök att använda redigeringsmetoderna för ett XPathNavigator objekt som skapas av ett XPathDocument objekt resulterar i en NotSupportedException.
Mer information om hur du skapar redigerbara XPathNavigator objekt finns i Läsa XML-data med XPathDocument och XmlDocument.
Infoga noder
Klassen XPathNavigator innehåller metoder för att infoga noder för syskon, underordnade noder och attribut i ett XML-dokument. Med de här metoderna kan du infoga noder och attribut på olika platser i förhållande till objektets XPathNavigator aktuella position och beskrivs i följande avsnitt.
Infoga noder på samma nivå
Klassen XPathNavigator innehåller följande metoder för att infoga syskonnoder.
Dessa metoder infogar syskonnoder före och efter noden som ett XPathNavigator objekt för närvarande är placerat på.
Metoderna InsertAfter och InsertBefore är överbelastade och accepterar ett string
objekt XmlReader eller XPathNavigator objekt som innehåller den syskonnod som ska läggas till som parametrar. Båda metoderna returnerar också ett XmlWriter objekt som används för att infoga syskonnoder.
Metoderna InsertElementAfter och InsertElementBefore infogar en enda syskonnod före och efter noden som ett XPathNavigator objekt för närvarande är placerat på med hjälp av namnområdesprefixet, det lokala namnet, namnområdes-URI:n och värdet som anges som parametrar.
I följande exempel infogas ett nytt pages
element före det price
underordnade elementet i det första book
elementet contosoBooks.xml
i filen.
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)
Exemplet tar contosoBooks.xml
filen som indata.
<?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>
Mer information om InsertAftermetoderna , InsertBeforeInsertElementAfter och InsertElementBefore finns i dokumentationen för klassreferensenXPathNavigator.
Infoga underordnade noder
Klassen XPathNavigator innehåller följande metoder för att infoga underordnade noder.
De här metoderna lägger till och förbereder underordnade noder i slutet av och början av listan över underordnade noder i noden som ett XPathNavigator objekt för närvarande är placerat på.
Precis som metoderna i avsnittet AppendChild "Infoga syskonnoder" accepterar metoderna och PrependChild ett string
objekt , XmlReader eller XPathNavigator objekt som innehåller den underordnade nod som ska läggas till som parametrar. Båda metoderna returnerar också ett XmlWriter objekt som används för att infoga underordnade noder.
Precis som metoderna i avsnittet AppendChildElement "Infoga syskonnoder" infogar metoderna och PrependChildElement en enda underordnad nod i slutet av och början av listan över underordnade noder i noden som ett XPathNavigator objekt för närvarande är placerat på med hjälp av namnområdesprefixet, det lokala namnet, namnområdes-URI:n och värdet som anges som parametrar.
I följande exempel läggs ett nytt pages
underordnat element till i listan över underordnade element i det första book
elementet contosoBooks.xml
i filen.
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)
Exemplet tar contosoBooks.xml
filen som indata.
<?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>
Mer information om AppendChildmetoderna , PrependChildAppendChildElement och PrependChildElement finns i dokumentationen för klassreferensenXPathNavigator.
Infoga attributnoder
Klassen XPathNavigator innehåller följande metoder för att infoga attributnoder.
Dessa metoder infogar attributnoder på elementnoden som ett XPathNavigator objekt för närvarande är placerat på. Metoden CreateAttribute skapar en attributnod på elementnoden som ett XPathNavigator objekt för närvarande är placerat på med hjälp av namnområdesprefixet, det lokala namnet, namnområdes-URI:n och värdet som anges som parametrar. Metoden CreateAttributes returnerar ett XmlWriter objekt som används för att infoga attributnoder.
I följande exempel skapas nya discount
attribut och currency
attribut på det price
underordnade elementet i det första book
elementet i contosoBooks.xml
filen med hjälp av objektet XmlWriter som returneras från CreateAttributes metoden.
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)
Exemplet tar contosoBooks.xml
filen som indata.
<?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>
Mer information om CreateAttribute metoderna och CreateAttributes finns i dokumentationen för klassreferensen XPathNavigator .
Kopiera noder
I vissa fall kanske du vill fylla i ett XML-dokument med innehållet från ett annat XML-dokument. XPathNavigator Både klassen och XmlWriter klassen kan kopiera noder till ett XmlDocument objekt från ett befintligt XmlReader objekt eller XPathNavigator objekt.
Metoderna AppendChild, PrependChildoch InsertBeforeInsertAfterXPathNavigator för klassen har alla överlagringar som kan acceptera ett XPathNavigator objekt eller ett XmlReader objekt som en parameter.
Metoden WriteNode för XmlWriter klassen har överlagringar som kan acceptera ett - XmlReadereller XPathNavigator -XmlNodeobjekt.
I följande exempel kopieras alla book
element från ett dokument till ett annat.
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");
Infoga värden
Klassen XPathNavigator innehåller SetValue metoderna och SetTypedValue för att infoga värden för en nod i ett XmlDocument objekt.
Infoga otypade värden
Metoden SetValue infogar helt enkelt det otypade värdet som skickas string
som en parameter som värdet för noden XPathNavigator som objektet för närvarande är placerat på. Värdet infogas utan någon typ eller utan att verifiera att det nya värdet är giltigt enligt nodens typ om schemainformation är tillgänglig.
I följande exempel SetValue används metoden för att uppdatera alla price
element i contosoBooks.xml
filen.
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)
Exemplet tar contosoBooks.xml
filen som indata.
<?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>
Infoga inskrivna värden
När typen av en nod är en enkel W3C XML-schematyp kontrolleras det nya värdet som infogas med SetTypedValue metoden mot fasetter av den enkla typen innan värdet anges. Om det nya värdet inte är giltigt enligt nodens typ (till exempel om du anger ett värde -1
för ett element vars typ är xs:positiveInteger
), resulterar det i ett undantag.
I följande exempel försöker du ändra värdet för elementet price
i det första book
elementet i contosoBooks.xml
filen till ett DateTime värde. Eftersom XML-schematypen för elementet price
definieras som xs:decimal
i contosoBooks.xsd
filerna resulterar detta i ett undantag.
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);
Exemplet tar contosoBooks.xml
filen som indata.
<?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>
Exemplet tar contosoBooks.xsd
också som indata.
<?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>
Egenskaperna InnerXml och OuterXml
Egenskaperna InnerXmlXPathNavigator och OuterXml för klassen ändrar XML-markering för noderna som ett XPathNavigator objekt för närvarande är placerat på.
Egenskapen InnerXml ändrar XML-markering för de underordnade noder som ett XPathNavigator objekt för närvarande är placerat på med det tolkade innehållet i den angivna XML-koden string
. OuterXml På samma sätt ändrar egenskapen XML-markeringen för de underordnade noder som ett XPathNavigator objekt för närvarande är placerat på samt själva den aktuella noden.
Förutom de metoder som beskrivs i det här avsnittet InnerXml kan egenskaperna och OuterXml användas för att infoga noder och värden i ett XML-dokument. Mer information om hur du använder InnerXml egenskaperna och OuterXml för att infoga noder och värden finns i avsnittet Ändra XML-data med XPathNavigator .
Namnområde och xml:lang-konflikter
Vissa konflikter som rör namnområdets omfång och xml:lang
deklarationer kan uppstå när XML-data infogas med hjälp InsertBeforeav metoderna , InsertAfterAppendChild och PrependChild för klassen XPathNavigator som tar XmlReader objekt som parametrar.
Följande är de möjliga namnområdeskonflikterna.
Om det finns ett namnområde i omfånget XmlReader i objektets kontext, där prefixet till namnområdes-URI-mappningen inte finns i XPathNavigator objektets kontext, läggs en ny namnområdesdeklaration till i den nyligen infogade noden.
Om samma namnområdes-URI ligger inom både XmlReader objektets kontext och XPathNavigator objektets kontext, men har ett annat prefix mappat till det i båda kontexterna, läggs en ny namnområdesdeklaration till i den nyligen infogade noden, med prefixet och namnområdes-URI:n hämtad från XmlReader objektet.
Om samma namnområdesprefix ligger inom både XmlReader objektets kontext och XPathNavigator objektets kontext, men har en annan namnområdes-URI mappad till det i båda kontexterna, läggs en ny namnområdesdeklaration till i den nyligen infogade noden som deklarerar prefixet igen med den namnområdes-URI som hämtas från XmlReader objektet.
Om prefixet samt namnområdes-URI:n i både XmlReader objektets kontext och XPathNavigator objektets kontext är samma läggs ingen ny namnområdesdeklaration till i den nyligen infogade noden.
Kommentar
Beskrivningen ovan gäller även för namnområdesdeklarationer med det tomma string
som prefix (till exempel standarddeklarationen för namnområde).
Följande är de möjliga xml:lang
konflikterna.
Om det finns ett
xml:lang
attribut i omfånget XmlReader i objektets kontext, men inte i XPathNavigator objektets kontext, läggs ettxml:lang
attribut vars värde hämtas från XmlReader objektet till den nyligen infogade noden.Om det finns ett
xml:lang
attribut i omfånget XmlReader i både objektets kontext och objektets kontext, men var och XPathNavigator en har ett annat värde, läggs ettxml:lang
attribut vars värde tas från XmlReader objektet till i den nyligen infogade noden.Om det finns ett attribut i omfånget XmlReader i både objektets kontext och objektets kontext, men var och XPathNavigator en
xml:lang
med samma värde, läggs inget nyttxml:lang
attribut till på den nyligen infogade noden.Om det finns ett
xml:lang
attribut i omfånget XPathNavigator i objektets kontext, men inget befintligt i XmlReader objektets kontext, läggs ingetxml:lang
attribut till i den nyligen infogade noden.
Infoga noder med XmlWriter
De metoder som används för att infoga noder för syskon, underordnade noder och attribut som beskrivs i avsnittet "Infoga noder och värden" är överbelastade. Metoderna InsertAfterXPathNavigator , InsertBefore, AppendChildoch PrependChildCreateAttributes i klassen returnerar ett XmlWriter objekt som används för att infoga noder.
XmlWriter-metoder som inte stöds
Alla metoder som används för att skriva information till ett XML-dokument med klassen XmlWriter stöds inte av klassen på grund av XPathNavigator skillnaden mellan XPath-datamodellen och dokumentobjektmodellen (DOM).
I följande tabell beskrivs de XmlWriter klassmetoder som inte stöds av XPathNavigator klassen.
Metod | beskrivning |
---|---|
WriteEntityRef | Utlöser ett NotSupportedException undantag. |
WriteDocType | Ignoreras på rotnivå och utlöser ett NotSupportedException undantag om det anropas på någon annan nivå i XML-dokumentet. |
WriteCData | Behandlas som ett anrop till WriteString metoden för motsvarande tecken eller tecken. |
WriteCharEntity | Behandlas som ett anrop till WriteString metoden för motsvarande tecken eller tecken. |
WriteSurrogateCharEntity | Behandlas som ett anrop till WriteString metoden för motsvarande tecken eller tecken. |
Mer information om klassen finns i XmlWriter klassens XmlWriter referensdokumentation.
Flera XmlWriter-objekt
Det går att ha flera XPathNavigator objekt som pekar på olika delar av ett XML-dokument med ett eller flera öppna XmlWriter objekt. Flera XmlWriter objekt tillåts och stöds i entrådade scenarier.
Följande är viktiga anteckningar att tänka på när du använder flera XmlWriter objekt.
XML-fragment som skrivs av XmlWriter objekt läggs till i XML-dokumentet när metoden för Close varje XmlWriter objekt anropas. XmlWriter Fram till dess skriver objektet ett frånkopplat fragment. Om en åtgärd utförs i XML-dokumentet påverkas inte eventuella fragment som skrivs av ett XmlWriter objekt innan det Close anropas.
Om det finns ett öppet XmlWriter objekt i ett visst XML-underträd och det underträdet XmlWriter tas bort kan objektet fortfarande lägga till i underträdet. Underträdet blir helt enkelt ett borttaget fragment.
Om flera XmlWriter objekt öppnas på samma plats i XML-dokumentet läggs de till i XML-dokumentet i den ordning objekten XmlWriter stängs, inte i den ordning de öppnades.
I följande exempel skapas ett XmlDocument objekt, ett XPathNavigator objekt skapas och objektet som XmlWriter returneras av PrependChild metoden används för att skapa strukturen för den första boken i books.xml
filen. Exemplet sparar det sedan som book.xml
filen.
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");
Spara ett XML-dokument
Att spara ändringar som gjorts i ett XmlDocument objekt som ett resultat av de metoder som beskrivs i det här avsnittet utförs med hjälp av klassens XmlDocument metoder. Mer information om hur du sparar ändringar som gjorts i ett XmlDocument objekt finns i Spara och skriva ett dokument.