Partager via


Supprimer des données XML à l’aide de XPathNavigator

La XPathNavigator classe fournit un ensemble de méthodes utilisées pour supprimer des nœuds et des valeurs d’un document XML. Pour utiliser ces méthodes, l’objet XPathNavigator doit être modifiable, autrement dit, sa CanEdit propriété doit être true.

XPathNavigator les objets qui peuvent modifier un document XML sont créés par la CreateNavigator méthode de la XmlDocument classe. XPathNavigator les objets créés par la XPathDocument classe sont en lecture seule et toute tentative d’utilisation des méthodes d’édition d’un XPathNavigator objet créé par un XPathDocument objet entraîne un NotSupportedException.

Pour plus d’informations sur la création d’objets modifiables XPathNavigator , consultez Lecture de données XML à l’aide de XPathDocument et xmlDocument.

Suppression de nœuds

La XPathNavigator classe fournit la DeleteSelf méthode permettant de supprimer des nœuds d’un document XML.

Suppression d’un nœud

La XPathNavigator classe fournit la DeleteSelf méthode permettant de supprimer le nœud actuel sur lequel un XPathNavigator objet est actuellement positionné à partir d’un document XML.

Une fois qu’un nœud a été supprimé à l’aide de la DeleteSelf méthode, il n’est plus accessible à partir de la racine de l’objet XmlDocument . Une fois qu’un nœud a été supprimé, il XPathNavigator est positionné sur le nœud parent du nœud supprimé.

Une opération de suppression n’affecte pas la position d’un XPathNavigator objet positionné sur le nœud supprimé. Ces XPathNavigator objets sont valides dans le sens où ils peuvent se déplacer dans la sous-arborescence supprimée, mais ne peuvent pas être déplacés vers l’arborescence du nœud principal à l’aide des méthodes de navigation standard du jeu de nœuds de la XPathNavigator classe.

Remarque

La MoveTo méthode de la XPathNavigator classe peut être utilisée pour déplacer ces XPathNavigator objets dans l’arborescence du nœud principal, ou de l’arborescence du nœud principal vers la sous-arborescence supprimée.

Dans l’exemple suivant, l’élément price du premier book élément du contosoBooks.xml fichier est supprimé à l’aide de la DeleteSelf méthode. La position de l’objet XPathNavigator après la suppression de l’élément price est sur l’élément parent book .

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

L’exemple prend le contosoBooks.xml fichier en tant qu’entrée.

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

Suppression d’un nœud d’attribut

Les nœuds d’attribut sont supprimés d’un document XML à l’aide de la DeleteSelf méthode.

Une fois qu’un nœud d’attribut a été supprimé, il n’est plus accessible à partir du nœud racine d’un XmlDocument objet et l’objet XPathNavigator est positionné sur l’élément parent.

Attributs par défaut

Quelle que soit la méthode utilisée pour supprimer des attributs, il existe des limitations spéciales sur la suppression d’attributs définis comme attributs par défaut dans le schéma DTD ou XML pour le document XML. Les attributs par défaut ne peuvent pas être supprimés, sauf si l’élément auquel ils appartiennent est également supprimé. Les attributs par défaut sont toujours présents pour les éléments qui ont des attributs par défaut déclarés, et par conséquent, la suppression d’un attribut par défaut entraîne l’insertion d’un attribut de remplacement dans l’élément et initialisé à la valeur par défaut déclarée.

Suppression de valeurs

La XPathNavigator classe fournit les méthodes et SetValue les SetTypedValue méthodes permettant de supprimer les valeurs non typées et typées d’un document XML.

Suppression des valeurs non typées

La SetValue méthode insère simplement la valeur non typée string passée en tant que paramètre comme valeur du nœud sur lequel l’objet XPathNavigator est actuellement positionné. Le passage d’une chaîne vide à la SetValue méthode supprime la valeur du nœud actuel.

L’exemple suivant supprime la valeur de l’élément price du premier book élément du fichier à l’aide contosoBooks.xml de la SetValue méthode.

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

L’exemple prend le contosoBooks.xml fichier en tant qu’entrée.

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

Suppression des valeurs typées

Lorsque le type d’un nœud est un type simple de schéma XML W3C, la nouvelle valeur insérée par la SetTypedValue méthode est vérifiée par rapport aux facettes du type simple avant la définition de la valeur. Si la nouvelle valeur n’est pas valide en fonction du type du nœud (par exemple, la définition d’une valeur -1 sur un élément dont le type est xs:positiveInteger), elle génère une exception. La SetTypedValue méthode ne peut pas non plus être passée null en tant que paramètre. Par conséquent, la suppression de la valeur d’un nœud typé doit être conforme au type de schéma du nœud.

L’exemple suivant supprime la valeur de l’élément price du premier book élément du contosoBooks.xml fichier à l’aide de la SetTypedValue méthode en définissant la valeur 0sur . La valeur du nœud n’est pas supprimée, mais le prix du livre a été supprimé en fonction de son type de xs:decimaldonnées .

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

Nœuds d’espace de noms

Les nœuds d’espace de noms ne peuvent pas être supprimés d’un XmlDocument objet. Les tentatives de suppression de nœuds d’espace de noms à l’aide de la DeleteSelf méthode entraînent une exception.

Propriétés InnerXml et OuterXml

Les propriétés InnerXml et OuterXml de la classe XPathNavigator modifient le balisage XML des nœuds sur lesquels un objet XPathNavigator est actuellement positionné.

La propriété InnerXml modifie, avec le contenu extrait du XML XPathNavigator donné, le balisage XML des nœuds enfants sur lesquels se trouve actuellement un objet string. De même, la OuterXml propriété modifie le balisage XML des nœuds enfants sur lesquels un XPathNavigator objet est actuellement positionné ainsi que le nœud actuel lui-même.

Outre les méthodes décrites dans cette rubrique, les InnerXml propriétés et OuterXml les propriétés peuvent être utilisées pour supprimer des nœuds et des valeurs d’un document XML. Pour plus d’informations sur l’utilisation des propriétés et InnerXml les OuterXml propriétés pour modifier des nœuds, consultez la rubrique Modifier des données XML à l’aide de XPathNavigator.

Enregistrement d’un document XML

L’enregistrement des modifications apportées à un XmlDocument objet en raison des méthodes décrites dans cette rubrique est effectuée à l’aide des méthodes de la XmlDocument classe. Pour plus d’informations sur l’enregistrement des modifications apportées à un XmlDocument objet, consultez Enregistrement et écriture d’un document.

Voir aussi