Sdílet prostřednictvím


Odebrání dat XML pomocí XPathNavigator

Třída XPathNavigator poskytuje sadu metod, které slouží k odebrání uzlů a hodnot z dokumentu XML. Aby bylo možné tyto metody použít, XPathNavigator musí být objekt upravitelný, to znamená, že jeho CanEdit vlastnost musí být true.

XPathNavigator objekty, které mohou upravovat dokument XML jsou vytvořeny CreateNavigator metodou XmlDocument třídy. XPathNavigatorobjekty vytvořené XPathDocument třídou jsou jen pro čtení a všechny pokusy o použití metod úprav objektu XPathNavigator vytvořeného objektem XPathDocument výsledkem .NotSupportedException

Další informace o vytváření upravitelných XPathNavigator objektů naleznete v tématu Čtení dat XML pomocí XPathDocument a XmlDocument.

Odebírání uzlů

Třída XPathNavigator poskytuje metodu DeleteSelf pro odebrání uzlů z dokumentu XML.

Odebrání uzlu

Třída XPathNavigator poskytuje metodu DeleteSelf pro odstranění aktuálního uzlu XPathNavigator objekt je nyní umístěn na z dokumentu XML.

Po odstranění uzlu pomocí DeleteSelf metody již není dostupný z kořenového adresáře objektu XmlDocument . Po odstranění XPathNavigator uzlu se umístí na nadřazený uzel odstraněného uzlu.

Operace odstranění nemá vliv na pozici žádného XPathNavigator objektu umístěného na odstraněného uzlu. Tyto XPathNavigator objekty jsou platné v tom smyslu, že se mohou přesouvat v rámci odstraněného podstromu, ale nelze je přesunout do stromu hlavního uzlu pomocí běžných navigačních metod XPathNavigator sady uzlů třídy.

Poznámka:

MoveTo Metodu XPathNavigator třídy lze použít k přesunutí těchto XPathNavigator objektů zpět do stromu hlavního uzlu nebo ze stromu hlavního uzlu do odstraněného podstromu.

V následujícím příkladu price je prvek prvního book prvku contosoBooks.xml souboru odstraněn pomocí DeleteSelf metody. Pozice objektu XPathNavigator po odstranění elementu price je na nadřazený book prvek.

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.DeleteSelf()  
  
Console.WriteLine("Position after delete: {0}", navigator.Name)  
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.DeleteSelf();  
  
Console.WriteLine("Position after delete: {0}", navigator.Name);  
Console.WriteLine(navigator.OuterXml);  

Příklad vezme contosoBooks.xml soubor jako vstup.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

Odebrání uzlu atributu

Uzly atributů se odeberou z dokumentu XML pomocí DeleteSelf metody.

Po odstranění uzlu atributu už není dostupný z kořenového XmlDocument uzlu objektu a XPathNavigator objekt se umístí do nadřazeného prvku.

Výchozí atributy

Bez ohledu na metodu použitou k odebrání atributů existují zvláštní omezení pro odebrání atributů, které jsou definovány jako výchozí atributy v DTD nebo XML Schématu pro dokument XML. Výchozí atributy nelze odebrat, pokud není odebrán také prvek, ke kterým patří. Výchozí atributy jsou vždy přítomny pro elementy, které mají deklarované výchozí atributy, a v důsledku toho odstraněním výchozího atributu dojde k vložení náhradního atributu do elementu a inicializace na výchozí hodnotu, která byla deklarována.

Odebrání hodnot

Třída XPathNavigator poskytuje SetValue a SetTypedValue metody pro odebrání nezatypovaných a zadaných hodnot z dokumentu XML.

Odebrání netypových hodnot

Metoda SetValue jednoduše vloží nezatypovanou hodnotu předanou string jako parametr jako hodnotu uzlu XPathNavigator , na který je objekt aktuálně umístěn. Předání prázdného řetězce metodě SetValue odebere hodnotu aktuálního uzlu.

Následující příklad odebere hodnotu price prvku prvního book prvku v contosoBooks.xml souboru pomocí SetValue metody.

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.SetValue("")  
  
navigator.MoveToRoot()  
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.SetValue("");  
  
navigator.MoveToRoot();  
Console.WriteLine(navigator.OuterXml);  

Příklad vezme contosoBooks.xml soubor jako vstup.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

Odebrání zadaných hodnot

Pokud je typ uzlu jednoduchý typ schématu W3C XML, nová hodnota vložená metodou SetTypedValue je kontrolována proti omezujícím vlastnostem jednoduchého typu před nastavením hodnoty. Pokud nová hodnota není platná podle typu uzlu (například nastavení hodnoty -1 prvku, jehož typ je xs:positiveInteger), výsledkem je výjimka. Metodu SetTypedValue nelze předat null také jako parametr. Odebráním hodnoty typového uzlu musí být v souladu s typem schématu uzlu.

Následující příklad odebere hodnotu price prvku prvního book prvku v contosoBooks.xml souboru pomocí SetTypedValue metody nastavením hodnoty na 0. Hodnota uzlu není odebrána, ale cena knihy byla odebrána podle jeho datového xs:decimaltypu .

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(0)  
  
navigator.MoveToRoot()  
Console.WriteLine(navigator.OuterXml)  
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(0);  
  
navigator.MoveToRoot();  
Console.WriteLine(navigator.OuterXml);  

Uzly oboru názvů

Uzly oboru názvů nelze z objektu XmlDocument odstranit. Při pokusu o odstranění uzlů oboru názvů pomocí DeleteSelf metody dojde k výjimce.

Vlastnosti InnerXml a OuterXml

XPathNavigatorOuterXml Vlastnosti InnerXml třídy mění kód XML uzlůXPathNavigator, na které je objekt aktuálně umístěn.

Vlastnost InnerXml změní kód XML podřízených XPathNavigator uzlů objekt je nyní umístěn s parsovaným obsahem daného XML string. OuterXml Podobně vlastnost změní kód XML podřízených XPathNavigator uzlů, na které je objekt aktuálně umístěn, stejně jako aktuální uzel samotný.

Kromě metod popsaných v tomto tématu InnerXml lze tyto vlastnosti OuterXml použít k odebrání uzlů a hodnot z dokumentu XML. Další informace o použití InnerXml a OuterXml vlastnostech k úpravě uzlů naleznete v tématu Úprava dat XML pomocí XPathNavigator .

Uložení dokumentu XML

Uložení změn provedených v objektu XmlDocument v důsledku metod popsaných v tomto tématu se provádí pomocí metod XmlDocument třídy. Další informace o ukládání změn provedených v objektu XmlDocument naleznete v tématu Ukládání a zápis dokumentu.

Viz také