Delen via


XML-gegevens invoegen met XPathNavigator

De XPathNavigator klasse biedt een set methoden die worden gebruikt om knooppunten van hetzelfde type, onderliggende en kenmerk in een XML-document in te voegen. Als u deze methoden wilt gebruiken, moet het XPathNavigator object kunnen worden bewerkt, dat wil gezegd: CanEdit de eigenschap ervan moet zijn true.

XPathNavigator objecten die een XML-document kunnen bewerken, worden gemaakt door de CreateNavigator methode van de XmlDocument klasse. XPathNavigator objecten die door de XPathDocument klasse zijn gemaakt, zijn alleen-lezen en pogingen om de bewerkingsmethoden te gebruiken van een object dat door een XPathNavigatorXPathDocument object is gemaakt, resulteert in een NotSupportedException.

Zie XML-gegevens lezen met XPathDocument en XmlDocument voor meer informatie over het maken van bewerkbare XPathNavigator objecten.

Knooppunten invoegen

De XPathNavigator klasse biedt methoden voor het invoegen van knooppunten op hetzelfde niveau, onderliggende en kenmerkknooppunten in een XML-document. Met deze methoden kunt u knooppunten en kenmerken invoegen op verschillende locaties ten opzichte van de huidige positie van een XPathNavigator object en worden beschreven in de volgende secties.

Knooppunten op hetzelfde niveau invoegen

De XPathNavigator klasse biedt de volgende methoden voor het invoegen van knooppunten op hetzelfde niveau.

Met deze methoden worden knooppunten op hetzelfde niveau ingevoegd voor en na het knooppunt waarop een XPathNavigator object momenteel is geplaatst.

De InsertAfter methoden InsertBefore worden overbelast en accepteren een string, XmlReader object of XPathNavigator object met het knooppunt op hetzelfde niveau om toe te voegen als parameters. Beide methoden retourneren ook een XmlWriter object dat wordt gebruikt om knooppunten op hetzelfde niveau in te voegen.

De InsertElementAfter en InsertElementBefore methoden voegen één knooppunt op hetzelfde niveau in voor en na het knooppunt waarop een XPathNavigator object zich momenteel bevindt met behulp van het voorvoegsel van de naamruimte, de lokale naam, de URI van de naamruimte en de waarde die is opgegeven als parameters.

In het volgende voorbeeld wordt een nieuw pages element ingevoegd vóór het price onderliggende element van het eerste book element in het contosoBooks.xml bestand.

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)

In het voorbeeld wordt het contosoBooks.xml bestand als invoer gebruikt.

<?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>

Zie de XPathNavigator referentiedocumentatie voor klassen voor meer informatie over de InsertAfter, InsertBeforeInsertElementAfter en InsertElementBefore methoden.

Onderliggende knooppunten invoegen

De XPathNavigator klasse biedt de volgende methoden om onderliggende knooppunten in te voegen.

Met deze methoden worden onderliggende knooppunten toegevoegd aan het einde en het begin van de lijst met onderliggende knooppunten van het knooppunt waarop een XPathNavigator object momenteel is geplaatst.

Net als bij de methoden in de sectie 'Knooppunten op hetzelfde niveau invoegen' accepteren de AppendChild en PrependChild methoden een string, XmlReader object of XPathNavigator object dat het onderliggende knooppunt bevat om toe te voegen als parameters. Beide methoden retourneren ook een XmlWriter object dat wordt gebruikt om onderliggende knooppunten in te voegen.

Net als de methoden in de sectie 'Knooppunten op hetzelfde niveau invoegen', voegen de AppendChildElement methoden PrependChildElement één onderliggend knooppunt toe aan het einde en het begin van de lijst met onderliggende knooppunten van het knooppunt waarop een XPathNavigator object momenteel is geplaatst met behulp van het voorvoegsel van de naamruimte, de lokale naam, de naamruimte-URI en de waarde die is opgegeven als parameters.

In het volgende voorbeeld wordt een nieuw pages onderliggend element toegevoegd aan de lijst met onderliggende elementen van het eerste book element in het contosoBooks.xml bestand.

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)

In het voorbeeld wordt het contosoBooks.xml bestand als invoer gebruikt.

<?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>

Zie de XPathNavigator referentiedocumentatie voor klassen voor meer informatie over de AppendChild, PrependChildAppendChildElement en PrependChildElement methoden.

Kenmerkknooppunten invoegen

De XPathNavigator klasse biedt de volgende methoden om kenmerkknooppunten in te voegen.

Met deze methoden worden kenmerkknooppunten ingevoegd op het elementknooppunt waarop een XPathNavigator object momenteel is geplaatst. De CreateAttribute methode maakt een kenmerkknooppunt op het elementknooppunt waarop een XPathNavigator object momenteel wordt geplaatst met behulp van het voorvoegsel van de naamruimte, de lokale naam, de naamruimte-URI en de waarde die is opgegeven als parameters. De CreateAttributes methode retourneert een XmlWriter object dat wordt gebruikt om kenmerkknooppunten in te voegen.

In het volgende voorbeeld worden nieuwe discount kenmerken gemaakt currency op het onderliggende element van het price eerste book element in het contosoBooks.xml bestand met behulp van het XmlWriter object dat is geretourneerd door de CreateAttributes methode.

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)

In het voorbeeld wordt het contosoBooks.xml bestand als invoer gebruikt.

<?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>

Zie de XPathNavigator referentiedocumentatie voor klassen voor meer informatie over de CreateAttribute en CreateAttributes methoden.

Knooppunten kopiëren

In bepaalde gevallen kunt u een XML-document vullen met de inhoud van een ander XML-document. Zowel de XPathNavigator klasse als de XmlWriter klasse kunnen knooppunten kopiëren naar een XmlDocument object van een bestaand XmlReader object of XPathNavigator object.

De AppendChild, PrependChildInsertBefore en InsertAfter methoden van de XPathNavigator klasse hebben allemaal overbelastingen die een XPathNavigator object of object XmlReader als parameter kunnen accepteren.

De WriteNode methode van de XmlWriter klasse bevat overbelastingen die een XmlNode, XmlReaderof XPathNavigator object kunnen accepteren.

In het volgende voorbeeld worden alle elementen van het book ene document naar het andere gekopieerd.

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");  

Waarden invoegen

De XPathNavigator klasse bevat de en SetTypedValue methoden voor het SetValue invoegen van waarden voor een knooppunt in een XmlDocument object.

Niet-getypte waarden invoegen

Met SetValue de methode wordt de niet-getypte string waarde ingevoegd die als parameter wordt doorgegeven als de waarde van het knooppunt waarop het XPathNavigator object momenteel is geplaatst. De waarde wordt ingevoegd zonder enig type of zonder te controleren of de nieuwe waarde geldig is volgens het type van het knooppunt als er schemagegevens beschikbaar zijn.

In het volgende voorbeeld wordt de SetValue methode gebruikt om alle price elementen in het contosoBooks.xml bestand bij te werken.

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)

In het voorbeeld wordt het contosoBooks.xml bestand als invoer gebruikt.

<?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>

Getypte waarden invoegen

Wanneer het type van een knooppunt een eenvoudig type W3C XML-schema is, wordt de nieuwe waarde die door de SetTypedValue methode is ingevoegd, gecontroleerd op de facetten van het eenvoudige type voordat de waarde wordt ingesteld. Als de nieuwe waarde niet geldig is op basis van het type van het knooppunt (bijvoorbeeld het instellen van een waarde van -1 een element waarvan het type is xs:positiveInteger), resulteert deze in een uitzondering.

In het volgende voorbeeld wordt geprobeerd de waarde van het element van het price eerste book element in het contosoBooks.xml bestand te wijzigen in een DateTime waarde. Omdat het XML-schematype van het price element is gedefinieerd als xs:decimal in de contosoBooks.xsd bestanden, resulteert dit in een uitzondering.

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);  

In het voorbeeld wordt het contosoBooks.xml bestand als invoer gebruikt.

<?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>

In het voorbeeld wordt ook de contosoBooks.xsd invoer gebruikt.

<?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>

De eigenschappen InnerXml en OuterXml

De InnerXml eigenschappen van OuterXml de XPathNavigator klasse wijzigen de XML-opmaak van de knooppunten waarop een XPathNavigator object momenteel is geplaatst.

De InnerXml eigenschap wijzigt de XML-opmaak van de onderliggende knooppunten waarop een XPathNavigator object momenteel is geplaatst met de geparseerde inhoud van de opgegeven XML string. Op dezelfde manier wijzigt de OuterXml eigenschap de XML-opmaak van de onderliggende knooppunten waarop een XPathNavigator object momenteel is geplaatst, evenals het huidige knooppunt zelf.

Naast de methoden die in dit onderwerp worden beschreven, kunnen de InnerXml en OuterXml eigenschappen worden gebruikt om knooppunten en waarden in een XML-document in te voegen. Zie het onderwerp XML-gegevens wijzigen met XPathNavigator voor meer informatie over het gebruik van de InnerXml en OuterXml eigenschappen voor het invoegen van knooppunten en waarden.

Naamruimte en xml:lang-conflicten

Bepaalde conflicten met betrekking tot het bereik van naamruimte en xml:lang declaraties kunnen optreden bij het invoegen van XML-gegevens met behulp van de InsertBefore, InsertAfterAppendChild en PrependChild methoden van de XPathNavigator klasse die objecten als parameters gebruikenXmlReader.

Hier volgen de mogelijke naamruimteconflicten.

  • Als er een naamruimte binnen het bereik van de context van het XmlReader object is, waarbij het voorvoegsel voor de URI-toewijzing van naamruimten zich niet in de context van het XPathNavigator object bevindt, wordt er een nieuwe naamruimtedeclaratie toegevoegd aan het zojuist ingevoegde knooppunt.

  • Als dezelfde naamruimte-URI binnen het bereik van zowel de context van het XmlReader object als de context van het XPathNavigator object valt, maar er in beide contexten een ander voorvoegsel aan is toegewezen, wordt er een nieuwe naamruimtedeclaratie toegevoegd aan het nieuw ingevoegde knooppunt, waarbij het voorvoegsel en de naamruimte-URI van het XmlReader object afkomstig zijn.

  • Als hetzelfde naamruimtevoorvoegsel binnen het bereik van zowel de context van het XmlReader object als de context van het XPathNavigator object valt, maar er in beide contexten een andere naamruimte-URI aan is toegewezen, wordt er een nieuwe naamruimtedeclaratie toegevoegd aan het nieuw ingevoegde knooppunt dat dat voorvoegsel opnieuw declareert met de naamruimte-URI die uit XmlReader het object is genomen.

  • Als het voorvoegsel en de naamruimte-URI in zowel de context van het XmlReader object als de context van het XPathNavigator object hetzelfde zijn, wordt er geen nieuwe naamruimtedeclaratie toegevoegd aan het zojuist ingevoegde knooppunt.

Notitie

De bovenstaande beschrijving is ook van toepassing op naamruimtedeclaraties met het lege string als voorvoegsel (bijvoorbeeld de standaardnaamruimtedeclaratie).

Hier volgen de mogelijke xml:lang conflicten.

  • Als er een xml:lang kenmerk binnen het bereik van de context van het XmlReader object is, maar niet in de context van het XPathNavigator object, wordt een xml:lang kenmerk waarvan de waarde van het XmlReader object wordt opgehaald, toegevoegd aan het zojuist ingevoegde knooppunt.

  • Als er een xml:lang kenmerk binnen het bereik van zowel de context van het XmlReader object als de context van het XPathNavigator object is, maar elk een andere waarde heeft, wordt een xml:lang kenmerk waarvan de waarde uit het XmlReader object wordt gehaald, toegevoegd aan het zojuist ingevoegde knooppunt.

  • Als er een xml:lang kenmerk binnen het bereik van zowel de context van het XmlReader object als de context van het XPathNavigator object is, maar elk met dezelfde waarde, wordt er geen nieuw xml:lang kenmerk toegevoegd op het zojuist ingevoegde knooppunt.

  • Als er een xml:lang kenmerk binnen het bereik van de context van het XPathNavigator object is, maar geen kenmerk in de context van het XmlReader object bestaat, wordt er geen xml:lang kenmerk toegevoegd aan het zojuist ingevoegde knooppunt.

Knooppunten invoegen met XmlWriter

De methoden die worden gebruikt om knooppunten op hetzelfde niveau, onderliggende en kenmerk in te voegen die worden beschreven in de sectie Knooppunten en waarden invoegen, worden overbelast. De InsertAftermethoden , InsertBeforeen PrependChildAppendChildCreateAttributes methoden van de XPathNavigator klasse retourneren een XmlWriter object dat wordt gebruikt om knooppunten in te voegen.

Niet-ondersteunde XmlWriter-methoden

Niet alle methoden die worden gebruikt voor het schrijven van informatie naar een XML-document met behulp van de XmlWriter klasse, worden ondersteund door de XPathNavigator klasse vanwege het verschil tussen het XPath-gegevensmodel en het Document Object Model (DOM).

In de volgende tabel worden de XmlWriter klassemethoden beschreven die niet worden ondersteund door de XPathNavigator klasse.

Wijze Description
WriteEntityRef Genereert een NotSupportedException uitzondering.
WriteDocType Genegeerd op het hoofdniveau en genereert een NotSupportedException uitzondering als deze wordt aangeroepen op een ander niveau in het XML-document.
WriteCData Behandeld als een aanroep van de WriteString methode voor het equivalente teken of de equivalente tekens.
WriteCharEntity Behandeld als een aanroep van de WriteString methode voor het equivalente teken of de equivalente tekens.
WriteSurrogateCharEntity Behandeld als een aanroep van de WriteString methode voor het equivalente teken of de equivalente tekens.

Zie de XmlWriter naslagdocumentatie voor klassen voor meer informatie over de XmlWriter klasse.

Meerdere XmlWriter-objecten

Het is mogelijk om meerdere XPathNavigator objecten te laten verwijzen naar verschillende delen van een XML-document met een of meer geopende XmlWriter objecten. Meerdere XmlWriter objecten worden toegestaan en ondersteund in scenario's met één thread.

Hieronder vindt u belangrijke opmerkingen bij het gebruik van meerdere XmlWriter objecten.

  • XML-fragmenten die door XmlWriter objecten zijn geschreven, worden toegevoegd aan het XML-document wanneer de Close methode van elk XmlWriter object wordt aangeroepen. Tot dat moment schrijft het XmlWriter object een verbroken fragment. Als een bewerking wordt uitgevoerd op het XML-document, worden fragmenten die door een XmlWriter object worden geschreven, vóór de Close aangeroepen bewerking niet beïnvloed.

  • Als er een geopend XmlWriter object op een bepaalde XML-substructuur staat en die substructuur wordt verwijderd, kan het XmlWriter object nog steeds worden toegevoegd aan de substructuur. De substructuur wordt gewoon een verwijderd fragment.

  • Als meerdere XmlWriter objecten op hetzelfde punt in het XML-document worden geopend, worden ze toegevoegd aan het XML-document in de volgorde waarin de XmlWriter objecten worden gesloten, niet in de volgorde waarin ze zijn geopend.

In het volgende voorbeeld wordt een XmlDocument object gemaakt, een XPathNavigator object gemaakt en vervolgens het XmlWriter object gebruikt dat door de PrependChild methode wordt geretourneerd om de structuur van het eerste boek in het books.xml bestand te maken. In het voorbeeld wordt het bestand opgeslagen als het book.xml bestand.

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");  

Een XML-document opslaan

Het opslaan van wijzigingen in een XmlDocument object als gevolg van de methoden die in dit onderwerp worden beschreven, wordt uitgevoerd met behulp van de methoden van de XmlDocument klasse. Zie Een document opslaan en schrijven voor meer informatie over het opslaan van wijzigingen in een XmlDocument object.

Zie ook