|
Opérations sur un attribut de XML |
|
|
Introduction |
|
Dans .NET Framework, un attribut est représenté par la classe XmlAttribute. Comme tous les noeuds, cette classe est basée sur la classe XmlNode. Le nom d'un attribut est représenté par sa propriété Name (Read only). La valeur d'un attribut est représentée par sa propriété Value. En plus de Value, vous pouvez également utiliser XmlAttribute.InnerText ou XmlAttribute.InnerXml pour accéder au texte d'un attribut. |
Un élément peut avoir 0, un, ou plusieurs attributs. Les attributs d'un élément sont stockés dans la propriété Attributes d'un objet XmlElement. La propriété XmlElement.Attributes est basée sur une classe appelée XmlAttributeCollection. La classe XmlAttributeCollection est basée sur la classe XmlNamedNodeMap. Avant d'effectuer une opération relative à l'attribut sur un élément, découvrez si l'élément a n'importe quel attribut, vous pouver vérifier la valeur de la propriété booléenne HasAttributes son élément XmlElement. Si cette propriété produit une valeur vraie, alors l'élément a au moins un attribut ; autrement, l'élément n'en a pas. Tandis qu'un certain élément peut avoir un attribut, un élément enfant de même parent avec le même nom peut ne pas avoir un attribut ou peut avoir un type complètement différent d'attribut. Voici un fichier XML avec des attributs dans quelques éléments : <?xml version="1.0" encoding="utf-8" ?>
<Videos>
<Video ISBN="0-7888-1623-3">
<Title Screenplay="Marty Kaplan">The Distinguished Gentleman</Title>
<Director>Jonathan Lynn</Director>
<Actors>
</Actors>
<Length>112 Minutes</Length>
<Format>DVD</Format>
<Rating>R</Rating>
</Video>
<Video>
<Title WrittenBy="Charlie Peter">Her Alibi</Title>
<Director>Bruce Beresford</Director>
<Length>94 Mins</Length>
<Format>DVD</Format>
<Rating>PG-13</Rating>
</Video>
</Videos>
Se rappeler que vous pouvez inclure les espaces blancs pour rendre votre code facile à lire. Ceci signifie que vous pouvez dactylographier un attribut sur la prochaine ligne du nom de son élément. Dans la leçon 36, nous avons vu que chaque élément doit être fermé. Nous avons vu que nous pourrions fermer un élément avec une étiquette de fin comme suit : <Video><ISBN>0-7888-1623-3</ISBN></Video> Nous avons également vu que nous pourrions fermer un élément localement comme suit : <Video/>. Si vous créez un attribut dans un élément vide, vous pouvez également le fermer en dactylographiant le slash indicatif avant le guillemet simple droit et après un espace vide. Voici un exemple : <Video ISBN="0-7888-1623-3" />
Comme mentionné déjà, un attribut appartient principalement à un élément. Ceci signifie que, en créant un attribut, vous devez indiquer à quel élément il appartiendrait. Pour soutenir les attributs d'un élément, la classe XmlElement est équipée de la méthode SetAttribute () qui a deux versions. La première version de cette méthode utilise la syntaxe suivante : public virtual void SetAttribute(string name, string value); Le premier argument est le nom du nouvel attribut et le deuxième argument sera son texte. Avant d'ajouter un attribut, vous devriez d'abord identifier son élément parent. Voici un exemple qui ajoute un attribut à l'élément racine : using System;
using System.IO;
using System.Xml;
namespace VideoCollection
{
public static class Exercise
{
private static void CreateAttribute()
{
string strFilename = "Videos.xml";
XmlDocument docXML = new XmlDocument();
if (File.Exists(strFilename))
{
// Open the XML file
docXML.Load(strFilename);
// Create an attribute and add it to the root element
docXML.DocumentElement.SetAttribute("FileDesc",
"Personal Video Collection");
docXML.Save("Videos.xml");
}
}
static int Main(string[] args)
{
CreateAttribute();
return 0;
}
}
}
À partir du fichier Videos.xml ci-dessus, ce code aurait comme conséquence : <?xml version="1.0" encoding="utf-8"?>
<Videos FileDesc="Personal Video Collection">
<Video ISBN="0-7888-1623-3">
<Title Screenplay="Marty Kaplan">The Distinguished Gentleman</Title>
<Director>Jonathan Lynn</Director>
<Actors>
</Actors>
<Length>112 Minutes</Length>
<Format>DVD</Format>
<Rating>R</Rating>
</Video>
<Video>
<Title WrittenBy="Charlie Peter">Her Alibi</Title>
<Director>Bruce Beresford</Director>
<Length>94 Mins</Length>
<Format>DVD</Format>
<Rating>PG-13</Rating>
</Video>
</Videos>
Pour soutenir l'addition d'attribut, la classe XmlDocument est équipée de la méthode CreateAttribute (), qui a trois versions. La première version de cette méthode a la syntaxe suivante : public XmlAttribute CreateAttribute(string name); Cette méthode s'attend au nom de l'attribut comme argument. Si elle réussit, cette méthode produit un objet XmlAttribute. Pour ajouter le nouvel attribut à un élément, vous pouvez appeler la méthode XmlElement.SetAttributeNote (). Cette méthode a deux versions. Une des versions utilise la syntaxe suivante : public virtual XmlAttribute SetAttributeNode(XmlAttribute newAttr); Cette méthode s'attend à un objet XmlAttribute. Voici un exemple qui recherche une vidéo particulière dans une collection et ajoute un attribut ISBN à elle : using System;
using System.IO;
using System.Xml;
namespace VideoCollection
{
public static class Exercise
{
private static void CreateAttribute()
{
string strFilename = "Videos.xml";
XmlDocument docXML = new XmlDocument();
if (File.Exists(strFilename))
{
// Open the XML file
docXML.Load(strFilename);
// Create a new attribute
XmlAttribute atrXML = docXML.CreateAttribute("ISBN");
atrXML.Value = "0-7907-3900-3";
// Get a list of elements whose names are Video
XmlNodeList nodVideos = docXML.GetElementsByTagName("Video");
// Since we will look for a specific video,
// get the list of all titles
XmlNodeList nodTitles = docXML.GetElementsByTagName("Title");
// Visit each title
for (int i = 0; i < nodTitles.Count; i++)
{
// Look for a video whose title is "Her Alibi"
if (nodTitles[i].InnerText.Equals("Her Alibi"))
{
// Once you find that video, add the new attribute to it
((XmlElement)(nodVideos[i])).SetAttributeNode(atrXML);
}
}
docXML.Save("Videos.xml");
}
}
static int Main(string[] args)
{
CreateAttribute();
return 0;
}
}
}
À partir du fichier Videos.xml, ci-dessus ce code aurait comme conséquence: <?xml version="1.0" encoding="utf-8"?>
<Videos FileDesc="Personal Video Collection">
<Video ISBN="0-7888-1623-3">
<Title Screenplay="Marty Kaplan">The Distinguished Gentleman</Title>
<Director>Jonathan Lynn</Director>
<Actors>
</Actors>
<Length>112 Minutes</Length>
<Format>DVD</Format>
<Rating>R</Rating>
</Video>
<Video ISBN="0-7907-3900-3">
<Title WrittenBy="Charlie Peter">Her Alibi</Title>
<Director>Bruce Beresford</Director>
<Length>94 Mins</Length>
<Format>DVD</Format>
<Rating>PG-13</Rating>
</Video>
</Videos>
Une fois qu'un attribut a été créé, pour identifier l'élément auquel il appartient, vous pouvez accéder à sa propriété XmlAttribute.OwnerElement. Cette propriété produit une valeur XmlElement.
Si un élément a un attribut que vous ne voulez pas ou aue vous n'en avez pas besoin davantage, vous pouvez supprimer cet attribut. Vous avez diverses options, deux sont disponibles à travers la classe XmlElement. Les attributs d'un objet XmlElement sont considérés stockés dans une liste indexée avec l'attribut le plus à gauche à l'index 0, le second à la gauche à l'index 1, et ainsi de suite. Basé sur ceci, pour enlever un attribut en se bassant sur son index pour le localiser, vous pouvez appeler la méthode XmlElement.RemoveAt (). Sa syntaxe est : public virtual XmlNode RemoveAttributeAt(int i); En appelant cette méthode, si un attribut existe à la position i, il sera supprimé et la méthode le renverrait. S'il n'y a aucun attribut à cet index, la méthode ne fait rien et elle renvoie 0. L'utilisation de la méthode XmlElement.RemoveAt () pour supprimer un attribut peut être incertaine parce que vous ne sauriez pas s'il y a un attribut à la position indiquée. Une alternative est d'indiquer le nom de l'attribut que vous voulez supprimer. Pour soutenir ceci, la classe XmlElement est équipée de la méthode RemoveAttribute (), qui a deux versions. Une des versions de cette méthode utilise la syntaxe suivante: public virtual void RemoveAttribute(string name); Cette méthode s'attend comme argument le nom de l'attribut à enlever. Une autre technique que vous pouvez utiliser consiste à définir un objet XmlAttribute et soumettre à son parent XmlElement pour la suppression. Pour ce faire, vous pouvez appeler la méthode RemoveAttributeNode() objet de XmlElement. Sa syntaxe est : public virtual XmlAttribute RemoveAttributeNode(XmlAttribute oldAttr); En appelant cette méthode, passer l'objet attribut comme argument. Si l'attribut existe, il serait enlevé et la méthode renverrait l'attribut supprimé. Si l'attribut n'existe pas, rien ne se produirait. |
|
|
||
| Précédent | Copyright © 2007, Yevol | Suivant |
|
|
||