Dela via


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 stringobjekt 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 stringobjekt , 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 ett xml: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 ett xml: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 nytt xml: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 inget xml: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.

Se även