Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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, na kterém je právě umístěn XPathNavigator objekt, z dokumentu XML.
Po odstranění uzlu pomocí DeleteSelf metody již není dostupný z kořenového adresáře objektu XmlDocument . Po odstranění uzlu se XPathNavigator 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 hlavního stromu uzlů pomocí běžných navigačních metod třídy XPathNavigator.
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 je prvek price prvního prvku book souboru contosoBooks.xml odstraněn metodou DeleteSelf. 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.
Odstraně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>
Odstraně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. V důsledku toho musí odstranění hodnoty typového uzlu 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í odstraněna, ale cena knihy byla odstraněna podle jejího datového typu xs:decimal.
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 jmenného prostoru
Uzly oboru názvů nelze z objektu XmlDocument odstranit. Pokusy o odstranění uzlů oboru názvů pomocí metody DeleteSelf vedou k výjimce.
Vlastnosti InnerXml a OuterXml
Vlastnosti InnerXml a OuterXml třídy XPathNavigator mění XML kód uzlů, na kterých je objekt XPathNavigator aktuálně umístěn.
Vlastnost InnerXml změní kód XML u podřízených uzlů, na nichž je objekt XPathNavigator aktuálně umístěn, pomocí parsovaného obsahu zadaného XML string. Podobně vlastnost OuterXml změní značky XML podřízených uzlů XPathNavigator, na které je objekt aktuálně umístěn, stejně jako samotný aktuální uzel.
Kromě metod popsaných v tomto tématu lze vlastnosti InnerXml a 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.