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 skapats av XPathDocument klassen är skrivskyddade och alla försök att använda redigeringsmetoderna för ett XPathNavigator-objekt skapat 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 till det första book-elementet i contosoBooks.xml-filen.

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 barnnoder

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 "Infoga syskonnoder" accepterar AppendChild- och PrependChild-metoderna ett string-, XmlReader- eller XPathNavigator-objekt som innehåller den underordnade nod som ska läggas till som parameter. 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 = 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 = 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 .

Kopiering av 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, PrependChild, InsertBefore och InsertAfter i XPathNavigator-klassen har alla överlagringar som kan acceptera ett XPathNavigator-objekt eller ett XmlReader-objekt som parameter.

WriteNode-metoden i XmlWriter-klassen har överlagringar som kan acceptera ett XmlNode, XmlReader eller XPathNavigator-objekt.

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 som en parameter string som värde för den nod XPathNavigator som objektet är placerat på just nu. 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 = 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 InnerXmlOuterXml och XPathNavigator 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 av InsertBefore, InsertAfter, AppendChild och PrependChild-metoderna 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.

Anmärkning

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 inom XmlReader 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 både XmlReader-objektets kontext och XPathNavigator-objektets kontext, men var och en har ett annat värde, läggs ett xml:lang-attribut vars värde tas från XmlReader-objektet till den nyligen infogade noden.

  • Om det finns ett xml:lang-attribut i omfånget inom både XmlReader-objektets kontext och XPathNavigator-objektets kontext, men båda 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 XPathNavigator-objektets kontext, men inget XmlReader-attribut i dess 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 InsertAfterInsertBefore , AppendChild, PrependChildoch CreateAttributesXPathNavigator 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 Det behandlas som ett anrop till WriteString-metoden för motsvarande tecken eller teckenserier.
WriteCharEntity Det behandlas som ett anrop till WriteString-metoden för motsvarande tecken eller teckenserier.
WriteSurrogateCharEntity Det behandlas som ett anrop till WriteString-metoden för motsvarande tecken eller teckenserier.

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 objekt XmlWriter i ett visst XML-underträd och det underträdet tas bort, kan objektet XmlWriter 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 returneras av XmlWriter-metoden används för att skapa strukturen för den första boken i PrependChild-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