Vous êtes sur la page 1sur 19

1

XML (ADO.NET)

XML
Sommaire
XML .............................................................................................................................................................. 1 1 2 Prsentation ......................................................................................................................................... 2 Structure d'un document XML ............................................................................................................. 3 2.1 Constitution .................................................................................................................................. 3 Instruction de traitement ..................................................................................................... 3 Commentaire ........................................................................................................................ 3 Les noeuds ............................................................................................................................ 3

2.1.1 2.1.2 2.1.3 2.2 3

Validit d'un document XML ........................................................................................................ 4

Manipulation basique d'un document XML ......................................................................................... 5 3.1 3.2 3.3 3.4 Cration dun XmlDocument ........................................................................................................ 5 Sauvegarder un XmlDocument..................................................................................................... 6 Dplacement ................................................................................................................................ 7 Lecture dinformation / affichage ................................................................................................ 8 XmlReader : ........................................................................................................................ 10

3.4.1 3.5

Cration / Ajout .......................................................................................................................... 11 XmlTextWriter .................................................................................................................... 12

3.5.1 3.6 3.7 4 5

Modification ............................................................................................................................... 14 Suppression ................................................................................................................................ 17

Avec un DataSet ................................................................................................................................. 17 Conclusion .......................................................................................................................................... 19

14/09/08

XML (ADO.NET)

1 Prsentation
Un document XML (eXtented Markup Langage) est un document contenant du texte qui reprsente des donnes. Ces donnes sont placs sous forme hirarchique : elles sont sous forme darborescence. Pour une reprsentation, ce sont des balises qui peuvent en contenir dautres. Nous verrons les termes employs pour un document XML (comme nud, nud parent ) dans la partie suivante (2 Structures dun document XML). Nous verrons aussi dans la prochaine partie quil y a des critres pour quun document XML soit valide. Comme dit plus haut ce genre de document possde des balises. Ces balises ne sont pas prdfinies. C'est--dire que lon cre les siennes. Il pourrait y en avoir une qui sappelle Contacts comme une qui sappelle Lieu . Cest plus tard que nous grerons la manipulation de ce document. Ces documents sont trs utiliss pour le stockage de donnes (pas en quantit importante). Contrairement un objet qui possde une dure de vie gale la dure de lapplication dans le meilleur des cas, un document XML na pas de relle dure de vie. C'est--dire que nous dcidons le moment o nous voulons le supprimer.

Par ailleurs puisquil y a une hirarchie et que nous devons dfinir la manire de se dplacer dans le document, il faut lavoir fait avec une certaine logique. Voici un petit exemple de ce que cela peut donner avec une liste de fruit.
XML

<ListeFruit> <Fruit id="1" nom="Poire"> <couleur>Jaune</couleur> <gout>Sucre</gout> </Fruit> <Fruit id="2" nom="Raisin"> <couleur>Ros</couleur> <gout>Sucre</gout> </Fruit> <Fruit id="3" nom="Mre"> <couleur>Rouge</couleur> <gout>Amer</gout> </Fruit> </ListeFruit>

La balise ListeFruit contient toute la liste de fruit. Ensuite chaque balise Fruit reprsente un fruit et possdent comme attribut lid du fruit et son nom. Chacune de ces balises Fruit contiennent dautres balises qui dcrivent le fruit.

Le XML est un langage valid par le W3C (World Wide Web Consortium), vous trouverez dautres informations en visitant leur site http://www.w3.org/xml et http://www.w3.org/TR/xml. Passons maintenant lexplication de la structure de cet exemple.

14/09/08

XML (ADO.NET)

2 Structure d'un document XML


Un document XML tant un langage valid par le W3C, il possde une syntaxe respecter ainsi quune structure. Nous allons comment il est constitu, structur, puis quels sont les critres pour avoir un document XML valide.

2.1

Constitution

2.1.1 Instruction de traitement Tout dabord, il doit commencer par une instruction de traitement qui dfinit quel type de fichier cest et les informations quil faut pour le faire fonctionner. Plus exactement pour permettre au processeur XML ou aux applications qui vont vouloir intragir avec ce document de connaitre la version, lencodage Une instruction de traitement ressemble ceci : < ?NomApplication Instruction ?> En XML et au moment o ce chapitre est crit, elle doit tre comme suit : <?xml version="1.0" encoding="utf-8" ?>. On spcifie dans cette instruction lencodage du document XML.

2.1.2 Commentaire Une chose importante lorsque lon fait du dveloppement cest de mettre des commentaires. Pour cela, il existe une balise de commentaire
<!-- Exemple de commentaire -->

Pour ces commentaires on peut mettre nimporte quels caractres lintrieur. En revanche, la squence -- est interdite.

2.1.3 Les noeuds Un noeud XML est un conteneur de donnes ou dautre noeud. Concrtement ce sont les balises du document XML, par exemple <ListeFruit></ListeFruit>. En anglais nud se dit node. Les noeuds XML rpondent des rglent concernant leur forme. Il ne doit possder aucun espace dans son nom, que ce soit en dbut, milieu ou fin Son nom ne peut pas commencer par un chiffre ou un caractre de ponctuation Evidemment la balise de fin doit correspondre la balise de dbut Son nom ne peut pas commencer par XML quel que soit la casse (<XmLTest> nest donc pas valide) Il doit possder au moins un nud racine (que nous verrons juste aprs) avec une balise de dbut et une balise de fin

Vous rencontrerez ou vous entendrez surement parler de la classe XmlElement. Il est savoir quun lment en XMl correspond un nud.

14/09/08

XML (ADO.NET)

Parlons maintenant un peu plus en dtail de ces noeuds. Nous allons voir les termes que lon donne ces noeuds suivant leurs positions, ce quils contiennent . Le noeud racine : Cest lui qui contient tout le reste du document. On peut sen passer mais par soucis de validit il le faut. En anglais il se dit Root Node.
Element racine

<?xml version="1.0" encoding="utf-8" ?> <ListeFruit> <!-- Element racine --> <!-- Contenu du document --> </ListeFruit>

Nud parent/fils : Un nud fils (ChildNode) est un nud contenu dans un autre nud. Le nud qui le contient sappelle le nud parent.
Nud parent / fils

<Fruit> <!-- Noeud parent du nud couleur et gout --> <couleur>Jaune</couleur> <!-- Noeud fils de Fruit --> <gout>Sucre</gout> <!-- Noeud fils de Fruit --> </Fruit>

Il y a aussi un autre type de nud qui sont les nuds adjascents. Ces nuds sont ceux qui sont situs au mme niveau que le nud courant.

Attribut : Un nud peut possder un ou plusieurs attributs. Cest vous qui crait le nom de lattribut est sa valeur au mme titre que les noms des nuds.
Attribut

<Fruit id="1" nom="Poire">

Dans cet exemple id et nom sont des attributs.

2.2

Validit d'un document XML

Que veut dire tre valide ? Dans ce cas cela veut dire quil respecte la norme du W3C. Il faut donc quil soit bien form. Il lui faut donc une ligne dinstruction de traitement, au moins le nud racine qui doit tre constitu de deux balises. De plus il ne peut y avoir dans le texte des caractres spciaux comme &<> . Pour les mettre il faut les remplacer par ce qui correspond dans le tableau ci-dessous :

14/09/08

XML (ADO.NET)

& < > "

&amp ; &lt ; &gt ; &apos ; &quot ;

A titre dexemple, <couleur>Jaune & Vert</couleur> nest pas valide, il faut crire <couleur>Jaune &amp; Vert</couleur>.

XML permet aussi de vrifier si un document XML est conforme une syntaxe donne. Un document DTD (Document Type Definition) est un document type contenant la syntaxe, la grammaire pour v rifier la conformit du document XML. La norme XML nimpose pas lutilisation dun DTD. Ainsi un document XML nayant pas de DTD mais qui rpond aux rgles de base est un document bien form. Un document valide est un document XML comportant un DTD et le respectant. Pour ajouter un DTD il faut ajouter un DOCTYPE tout comme en HTML.

3 Manipulation basique d'un document XML


Pour utiliser les classes XML il faut importer lespace de noms System.Xml.

3.1 Cration dun XmlDocument


Pour pouvoir travailler sur un document XML ou sur une chaine de caractre XML, il faut crer un objet de type XmlDocument. Il existe deux mthodes du XmlDocument qui nous seront utile pour remplir notre objet XmlDocument : Load et LoadXml. Permet de charger le contenu dun document ou dun objet contenant du XML dans le XmlDocument. Load Argument : - Un objet Stream : charge le XmlDocument depuis le flux spcifi - String : URL vers le fichier contenant le XML - TextReader : charge depuis un TextReader - XmlReader : charge depuis un XmlReader Attend en argument une chaine de caractres contenant du XML.

LoadXml

Voici un exemple dutilisation de ces deux mthodes :

14/09/08

XML (ADO.NET)

C#

XmlDocument document = new XmlDocument(); document.Load(@"C:\MyProject\ConsoleApplication1\ConsoleApplication1\Fruit.xml");

XmlDocument document = new XmlDocument(); document.LoadXml("<Fruit id='1' nom='Poire'><couleur>Jaune &amp; Vert</couleur><gout>Sucre</gout></Fruit>");

Rappel : En C# larobase (@) devant une chaine de caractre permet dviter davoir chapper le caractre dchappement et donc davoir \\.
VB.NET

Dim document As XmlDocument = New XmlDocument() document.Load("C:\MyProject\ConsoleApplication1\ConsoleApplication1\Fruit.xml")

Dim document As XmlDocument = New XmlDocument() document.LoadXml("<Fruit id='1' nom='Poire'><couleur>Jaune &amp; Vert</couleur><gout>Sucre</gout></Fruit>")

Pour la validit du document il faut crer la ligne dinstruction de traitement. Pour cela on va utiliser un objet de type XmlDeclaration qui nous permet de dclarer lencodage, la version .
C#

XmlDocument document = new XmlDocument(); XmlDeclaration declar; declar = document.CreateXmlDeclaration("1.0", "utf-8", null);

VB.NET

Dim document As XmlDocument = New XmlDocument() Dim declar As XmlDeclaration declar = document.CreateXmlDeclaration("1.0", "utf-8", Nothing)

Nous verrons dans la partie traitant de lajout de donnes comment ajouter cette ligne notre document XML. Passons la sauvegarde de ce document dans un fichier.

3.2 Sauvegarder un XmlDocument


Maintenant que nous avons appris crer un XmlDocument et le remplir, nous allons voir comment le sauvegarder. Pour ce faire, on utilise la mthode Save du XmlDocument. Voir dans le tableau ci-dessous les arguments que peut prendre cette mthode.

14/09/08

XML (ADO.NET)

Save

Un objet Stream : enregistre dans le flux spcifi Un String : correspond une URL, enregistre dans le fichier spcifi Un objet TextWriter ou un objet XmlWriter : enregistre dans lobjet TextWriter ou XmlWriter spcifi

Exemple dutilisation avec un String :


C#

document.Save(@"C:\MyProject\ConsoleApplication1\ConsoleApplication1\Fruit.xml");

VB.NET

document.Save("C:\MyProject\ConsoleApplication1\ConsoleApplication1\Fruit.x ml")

Pour pouvoir sauvegarder le document, il faut que celui-ci soit valide. En particulier quil possde un nud racine. Nous verrons comment crer un nud racine plus tard. Pour revenir la mthode Save, si vous ne mettez en String quun nom de fichier (Fruit.xml) par exemple, votre fichier se trouvera dans le document bin\Debug de votre projet (par dfaut).

3.3 Dplacement
On entend par dplacement le fait daccder un endroit prcis du document XML pour accder aux donnes, aux nuds enfants etc. Pour cela on va donner plusieurs mthodes et proprits qui permettent ceci et on expliquera un exemple qui les regroupera toutes (comme XmlDocument hrite de XmlNode, on retrouva des mthodes dans les deux). Mthodes GetElementsByTagName Description Mthode de XmlDocument qui permet de rcuprer un XmlNodeList contenant tous les lments qui correspondent au nom spcifi en argument.

Toutes les proprits qui suivent se retrouvent dans XmlDocument et XmlNode sauf une : DocumentElement. Proprits ChildNodes DocumentElement FirstChild HasChildNodes LastChild NextSibling ParentNode PreviousSibling Description Retourne un XmlNodeList. Rcupre tous les nuds enfants du nud. Retourne un XmlNode qui contient le nud racine du document. Retourne le premier nud enfant du nud courant. Retourne un boolen indiquant si le nud possde des enfants. Retourne le dernier nud enfant du nud courant. Retourne le premier nud qui suit le nud courant. Retourne le nud parent. Retourne le nud prcdent le nud courant.

14/09/08

XML (ADO.NET)

Pour effectuer une modification, un ajout ou toute autre action, il faut se placer dans le document un endroit o lon poura effectuer notre action et donc il faut rcuprer un objet que lon appellera nud courant. Cette mthode et ces proprits permettent de rcuprer lobjet qui vous interessera. Nous verrons des exemples concret dans les parties suivantes.

3.4 Lecture dinformation / affichage


Il existe diffrent moyen de lire les donnes contenues dans le fichier XML. Nous allons commencer par voir les mthodes qui permettent de lire les informations dun nud ou groupe de nud. Il y aura aussi des mthodes qui permettent de rcuprer des informations quil suffira ensuite dafficher.

Ceci sapplique sur les XmlNode : Proprits Attributes InnerText InnerXml Name NodeType OwnerDocument Value Description Rcupre un XmlAttributeCollection qui contient les attributs du nud. Rcupre les valeurs (value) de tous les nuds enfants. Retourne un string Rcupre le XML contenu dans le nud soit tout le XML qui compose les nuds enfants de ce nud. Retourne un string Rcupre le nom du nud. Accessible en lecture seule. Retourne le type du nud courant. On peut voir les diffrents types de nud possible dans lenum XmlNodeType. Rcupre le XmlDocument auquel ce nud appartient Rcupre ou dfinit la valeur du nud

Exemple daffichage utilisant le document Xml de fruit vu plus haut :

14/09/08

XML (ADO.NET)

C#

XmlDocument doc = new XmlDocument(); doc.Load(@"C:\MyProject\ConsoleApplication1\ConsoleApplication1\Fruit.xml"); foreach (XmlNode e in doc.ChildNodes) { Console.WriteLine(e.Name); } foreach (XmlNode e in doc.DocumentElement.ChildNodes) { Console.WriteLine(" " +e.Name +" id= " +e.Attributes["id"].Value +" Nom= " +e.Attributes[1].Value); foreach (XmlNode i in e.ChildNodes) { Console.WriteLine(" " + i.Name +" Valeur : " + i.InnerText); } Console.WriteLine("\n\n"); } Console.Read();

VB.NET

Dim doc As XmlDocument = New XmlDocument() doc.Load("C:\MyProject\ConsoleApplication1\ConsoleApplication1\Fruit.xml ") For Each e In doc.ChildNodes Console.WriteLine(e.Name) Next For Each e In doc.DocumentElement.ChildNodes Console.WriteLine(" " + e.Name + " id= " + e.Attributes("id").Value + " Nom= " + e.Attributes(1).Value) For Each i In e.ChildNodes Console.WriteLine(" " + i.Name + " Valeur : i.InnerText) Next Console.WriteLine(vbNewLine + vbNewLine) Next Console.Read()

" +

Pour lexplication nous avons prfr mettre des phrases ici plutt quen commentaire pour ne pas alourdir le code. La premire et la seconde ligne de code sont destines crer un XmlDocument puis le remplir avec le document Xml contenant la liste de fruit. Une fois le document charg nous voulons lafficher : pour cela nous avons choisi une boucle foreach. Nous rcuprons donc une liste des nuds se trouvant dans le document avec la proprit ChilNodes. Si

14/09/08

10

XML (ADO.NET)

vous regardez ce que cela donne sur limage du rsultat, vous remarquerez quil contient la dclaration Xml et le nud racine. La seconde boucle elle doit afficher le contenu du nud racine. On va donc rcuprer le root du document avec la proprit DocumentElement et utiliser nouveau la proprit ChildNodes pour en rcuprer tous les nuds. De l on affiche le nom avec la proprit Name et les attributs avec Attributs qui prend en paramtre soit le numro de lattribut (le premier correspond 0, le second 1 ) soit une chaine de caractre correspondant au nom du nom. En utilisant la proprit Value sur les attributs que lon a rcuprs, on rcupre leurs valeurs pour laffichage. Si on avait utilis la proprit Name on aurait alors rcupr le nom de lattribut. Dans cette seconde boucle on va crer une troisime boucle pour pouvoir rcuprer les nuds qui contiennent les valeurs sur les fruits. Dans cette boucle on affiche encore une fois le nom des nuds concatn avec leurs valeurs que lon rcupre avec la proprit Value. Le Console.Read la fin permet de voir le rsultat affich dans la console.

3.4.1 XmlReader : Un autre moyen est dutiliser un objet de type XmlReader. Il correspond un lecteur qui fournit un accs en lecture seule, qui nest pas mis en cache et qui ne peut tre lut que dans un seul sens : le sens normal de la lecture (du haut du fichier vers le bas).
C#

XmlReader reader = XmlReader.Create("Fruit.xml"); while (!reader.EOF) { reader.Read(); Console.Write(reader.Value); } reader.Close(); Console.Read();

VB.NET

Dim reader As XmlReader = XmlReader.Create("Fruit.xml") While Not reader.EOF reader.Read() Console.Write(reader.Value) End While reader.Close() Console.Read()

On cre un objet reader de type XmlReader sur lequel on utilise la mthode Create du Xmlreader qui permet de crer un flux et qui attend, dans notre exemple, lURL dun fichier XML. Notre XmlReader instanci et initialis nous allons maintenant faire la boucle pour lire les donnes. La proprit EOF

14/09/08

11

XML (ADO.NET)

retourne un boolen qui dtermine si le reader est la fin de la lecture ou non. La mthode Read du XmlReader permet de lire le nud suivant (puisque le reader se dplace de nud en nud). Aprs la boucle on ferme le reader avec la mthode Close. Le Console.Read() ntant l que pour nous permettre de lire ce qui est affich dans la console.

Maintenant voici les tableaux qui recensent les mthodes et proprits utiles du XmlReader :

Mthodes Close Create GetAttribute Value

Description Change ReadState en Closed et ferme laccs au fichier. Crer une instance de XmlReader. Obtient la valeur de lattribut spcifi. Rcupre la valeur du nud en cours.

3.5 Cration / Ajout


Mthodes du XmlDocument : Mthodes Description CreateAttribute Permet de crer un attribut CreateComment Crer un XmlComment qui contient les donne spcifi en argument (en String). CreateNode Crer et retourne un XmlNode ReadNode Crer un nud partir des informations contenu dans le XmlReader (plus exactement par rapport au nud sur lequel il est positionn).

Ce qui suit sont les mthodes du XmlNode qui permettent la cration o lajout de nud dans le Xml. Mthodes AppendChild Description Insre le nud spcifi la fin des nuds enfants du nud courant. Il sutilise de la manire suivante : NomObjetNoeud.AppendChild(NoeudAAjouter) Permet de crer un clone du nud spcifi. Insre le nud spcifi juste aprs le nud courant. Insre le nud spcifi juste avant le nud courant. Insre le nud spcifi au dbut des nuds enfants du nud courant.

Clone InsertAfter InsertBefore PrependChild

14/09/08

12

XML (ADO.NET)

Il peut tre intressant de voir avec un exemple comment on cre et ajoute des attributs :
C#

XmlDocument document = new XmlDocument(); document.Load(path); //On charge le fichier XML : path correspond l'url du fichier XmlNode node = document.DocumentElement; // On rcupre dans un XmlNode le noeud racine XmlAttribute nodeattr = document.CreateAttribute("test"); //On cre un attribut avec la mthode CreateAttribute du XmlDocument nodeattr.Value = "Valeur"; //On donne une valeur l'attribut node.Attributes.Append(nodeattr); // On ajoute l'attribut au noeud

VB.NET

Dim document As XmlDocument = New XmlDocument() document.Load(path) Dim node As XmlNode = document.DocumentElement Dim nodeattr As XmlAttribute = document.CreateAttribute("test") nodeattr.Value = "Valeur" node.Attributes.Append(nodeattr)

Pour crer un attribut, on instancie un objet XmlAttribute qui va contenir le rsultat de la mthode CreateAttribute (qui prend un argument un string qui correspond au nom de lattribut) du XmlDocument. La Mthode Value du XmlDocument permet dobtenir ou de dfinir la valeur de lattribut. Ensuite on lajoute au nud (dans lexemple le nud est le nud racine).

3.5.1 XmlTextWriter On a vu que XmlReader permet de rcuprer un flux en lecture seule. Ici XmlTextWriter va permettre de rcuprer un flux dans lequel on peut crire. Tableau des mthodes du XmlTextWriter : Mthodes Close Dispose WriteAttributes WriteAttributeString WriteCData WriteComment WriteDoctype WriteEndDocument WriteEndElement WriteStartDocument WriteStartElement WriteString Description Ferme les flux utiliss Libre les ressources utiliss par le XmlTextWriter Attend en argument un XmlReader. Ecrit les attributs trouvs la position actuelle du XmlReader. Attend deux arguments qui sont le nom de lattribut et sa valeur. Permet dcrire un attribut dans llment en cours. Permet la cration dun bloc <!*CDATA*...]]> Attend en argument le commentaire ajouter. Permet la cration dun Doctype. Termine lcriture du document (ferme toute les critures en cours). Termine lcriture dun lment Dmarre lcriture dun document Dmarre lcriture dun lment. Attend en paramtre le nom de cet lment. Ecrit le texte pass en argument dans llment en cours. 14/09/08

13

XML (ADO.NET)

Lexemple qui va suivre va tre la cration dun document Xml en utilisant un objet XmlTextWriter :
C#

XmlTextWriter rw = new XmlTextWriter(@"C:\MyProject\ConsoleApplication6\ConsoleApplication6\test.xml", Encoding.UTF8); rw.WriteStartDocument(); rw.WriteStartElement("Root"); rw.WriteStartElement("Noeud"); rw.WriteAttributeString("id", "value"); rw.WriteString("Sa fonctionne"); rw.WriteComment("Commentaire"); rw.WriteEndElement(); rw.WriteEndElement(); rw.WriteEndDocument() ; rw.Close();

VB.NET

Dim rw As XmlTextWriter = New XmlTextWriter("C:\MyProject\ConsoleApplication7\ConsoleApplication7\test.xml", Encoding.Default) rw.WriteStartDocument() rw.WriteStartElement("Root") rw.WriteStartElement("Noeud") rw.WriteAttributeString("id", "value") rw.WriteString("Sa fonctionne") rw.WriteComment("Commentaire") rw.WriteEndElement() rw.WriteEndElement() rw.WriteEndDocument() rw.Close()

Comme vous pouvez le voir dans limage ci-dessus, tout se trouve sur une ligne. Aussi nous navons pas utilis de moyen de sauvegarde : puisque cest un flux il va crire directement et en temps rel dans le fichier. Tout dabord nous avons cr un objet XmlTextWriter dans lequel on dfinit le fichier quon utilisera et le type dencodage. Pour Encoding il faut avoir import System.Text. Une fois notre objet instanci, on peut commencer crire dedans. Pour cela on utilise des mthodes tels que WriteStartDocument qui permet dcrire la ligne dinstruction Xml, WriteStartElement qui va commencer lcriture dun lment ect Le contenu du document, dun lment ou autre sera compris entre le start et le end (WriteStartElement / WriteEndElement). Pour le reste rfrez vous au tableau plus haut. On finit par un close pour fermer le flux.

14/09/08

14

XML (ADO.NET)

3.6 Modification
Pour modifier une donne dj prsente dans le document XML, il faut rcuprer dans un objet les ou les nuds correspondant. Pour faire simple nous ne donnerons quun tableau avec les mthodes qui permettent de modifier des donnes sans exemple. Mthode ReplaceChild Description Remplace par le premier nud en paramtre le second nud spcifi.

Proprits InnerText InnerXml Prefix Value

Description Rcupre les valeurs (value) de tous les nuds enfants. Retourne un string Rcupre le XML contenu dans le nud soit tout le XML qui compose les nuds enfants de ce nud. Retourne un string Obtient ou dfini le prfixe de lespace de nom du nom en cours Obtient ou dfini la valeur du nud

Exemple utilisant le ReplaceChild et le InnerXml :

14/09/08

15

XML (ADO.NET)

C# - Code adapt pour une solution web application

DataSet ds = new DataSet("Test"); // Crer un dataset DataTable dt = new DataTable("myTable"); // Crer un datable dt.Columns.Add("col1"); // Ajoute une colonne dans la table dt.Columns.Add("col2"); // Une deuxime colonne // Ajoute une ligne = des lments dans les colonnes dt.Rows.Add("Dans col1", "Dans col2"); // Ajoute la table dans le dataset ds.Tables.Add(dt); // On cre une seconde DataTable DataTable dt2 = new DataTable("mySecondTable"); dt2.Columns.Add("colA"); //Premire colonne dt2.Columns.Add("colB"); // Deuxime colonne dt2.Rows.Add("ABC", "DEF"); // Insertion d'lements dans les colonnes ds.Tables.Add(dt2); // Ajout de la seconde table dans le DataSet ds.WriteXml(Server.MapPath("test.xml")); //On met cre le document test.xml ds.Dispose(); // On libre les ressources du DataSet ds.Reset(); // On nettoie le DataSet dt.Dispose(); // On libre les ressources du DataTable dt.Reset(); // On nettoie le DataTable XmlDocument doc = new XmlDocument(); // On cre un objet XML nomm doc // L'objet doc est une copie de test.xml doc.Load(Server.MapPath("test.xml")); XmlNode root = doc.DocumentElement; // Rcupre le noeud racine // On cre un nouvel lment elem XmlElement elem = doc.CreateElement("NewTable"); // On cre un nouvel lment underElem XmlElement underElem = doc.CreateElement("AnotherOne"); underElem.InnerText = "mourek"; // On cre une valeur texte pour underElem // On dfinie underElem comme tant un lement fils de elem elem.AppendChild(underElem); // On remplace le premier enfant du noeud racine par le noeud elem root.ReplaceChild(elem, root.FirstChild); doc.Save(Server.MapPath("test.xml")); // On met jour le fichier test.xml // On rcupre en lecture dans la DataSet le fichier test.xml ds.ReadXml(Server.MapPath("test.xml")); // On rcupre dans la DataTable le noeud "NewTable" dt = ds.Tables["NewTable"]; // On rcupre dans la DataTable le noeud "mySecondTable" dt2 = ds.Tables["mySecondTable"]; //On affiche les 2 tables contenues dans des DataTable dans 2 GridView GridView myGridview = new GridView(); myGridview.DataSource = dt; myGridview.DataBind(); GridView myGridview2 = new GridView(); myGridview2.DataSource = dt2; myGridview2.DataBind(); form1.Controls.Add(myGridview); form1.Controls.Add(myGridview2);

14/09/08

16

XML (ADO.NET)

VB.NET Code adapt pour une solution Web Application

Dim ds As DataSet = New DataSet("Test") ' Crer un dataset Dim dt As DataTable = New DataTable("myTable") ' Crer un datable dt.Columns.Add("col1") ' Ajoute une colonne dans la table dt.Columns.Add("col2") ' Une deuxime colonne ' Ajoute une ligne = des lments dans les colonnes dt.Rows.Add("Dans col1", "Dans col2") ' Ajoute la table dans le dataset ds.Tables.Add(dt) ' On cre une seconde DataTable Dim dt2 As DataTable = New DataTable("mySecondTable") dt2.Columns.Add("colA") 'Premire colonne dt2.Columns.Add("colB") ' Deuxime colonne dt2.Rows.Add("ABC", "DEF") ' Insertion d'lements dans les colonnes ds.Tables.Add(dt2) ' Ajout de la seconde table dans le DataSet 'On met cre le document test.xml

ds.WriteXml(Server.MapPath("test.xml")) ds.Dispose() ds.Reset() ' dt.Dispose() dt.Reset() '

' On libre les ressources du DataSet On nettoie le DataSet ' On libre les ressources du DataTable On nettoie le DataTable ' On cre un objet XML nomm doc

Dim doc As XmlDocument = New XmlDocument()

' L'objet doc est une copie de test.xml doc.Load(Server.MapPath("test.xml")) Dim root As XmlNode = doc.DocumentElement ' Rcupre le noeud racine ' On cre un nouvel lment elem Dim elem As XmlElement = doc.CreateElement("NewTable") ' On cre un nouvel lment underElem Dim underElem As XmlElement = doc.CreateElement("AnotherOne") underElem.InnerText = "mourek" ' On cre une valeur texte pour underElem ' On dfinie underElem comme tant un lement fils de elem elem.AppendChild(underElem) ' On remplace le premier enfant du noeud racine par le noeud elem root.ReplaceChild(elem, root.FirstChild) doc.Save(Server.MapPath("test.xml")) ' On met jour le fichier test.xml ' On rcupre en lecture dans la DataSet le fichier test.xml ds.ReadXml(Server.MapPath("test.xml")) ' On rcupre dans la DataTable le noeud "NewTable" dt = ds.Tables("NewTable") ' On rcupre dans la DataTable le noeud "mySecondTable" dt2 = ds.Tables("mySecondTable") 'On affiche les 2 tables contenues dans des DataTable dans 2 GridView Dim myGridview As GridView = New GridView() myGridview.DataSource = dt myGridview.DataBind() Dim myGridview2 As GridView = New GridView() myGridview2.DataSource = dt2 myGridview2.DataBind() form1.Controls.Add(myGridview) form1.Controls.Add(myGridview2)

14/09/08

17

XML (ADO.NET)

Aperu de la page web gnre :

3.7 Suppression
Voici les mthodes permettant de supprimer un nud ainsi quun exemple : Mthodes RemoveAll RemoveChild Description Supprime tous les nuds enfants du nud courant. Supprimer le nud enfant spcifi du nud courant.

C#

XmlDocument doc = new XmlDocument(); doc.Load(@"Fruit.xml"); doc.DocumentElement.RemoveAll(); doc.Save("test.xml");


VB.NET

Dim doc As XmlDocument = New XmlDocument() doc.Load("C:\MyProject\ConsoleApplication7\ConsoleApplication7\Xml.xml") doc.DocumentElement.RemoveAll() doc.Save("test.xml")

On charge dans un XmlDocument le document Xml contenant la liste de fruit. Ensuite on se place au root et on utilise la mthode RemoveAll qui permet de supprimer tous les nuds enfants. Limage de droite montre le resultat se trouvant dans le fichier test.xml.

4 Avec un DataSet
Le DataSet est un objet reprsentant un schma dune base de donnes entire ou dune partie de celle-ci. A limage des bases de donnes relationnelles, il peut contenir des tables et des relations entre ces tables (voir Chapitre Base de donnes ADO.NET).

14/09/08

18

XML (ADO.NET)

Les DataSet peuvent tre srialis en XML, et inversement des fichiers XML peuvent tre rcuprs dans un DataSet via les mthodes WriteXml() pour la srialisation et ReadXml() pour la rcupration.

C#

DataSet ds = new DataSet(); // On cre un dataset DataTable dt = new DataTable("myTable"); // On cre un datable dt.Columns.Add("col1"); // On ajoute une colonne dans la table dt.Columns.Add("col2"); // Une deuxime colonne // Ajoute une ligne = des lments dans les colonnes dt.Rows.Add("Dans col1", "Dans col2"); // Ajoute la table dans le dataset ds.Tables.Add(dt); // On srialise notre DataSet dans un fichier XML // La mthode Server.MapPath() permet de rcuprer le chemin racine de votre application ds.WriteXml(Server.MapPath("test.xml")); ds.Dispose(); // On libre les ressources ds.Reset(); // Vide lobjet et le remet son tat initial // On rcupre dans un DataSet notre XML que lon affiche dans une GridView il est noter quici on utilise le mme DataSet. Il est bien entendu possible den crer un autre. ds.ReadXml(Server.MapPath("test.xml")); GridView myGridview = new GridView(); // On cre un nouvelle GridView // On lui indique la source de donnes ici notre DataSet myGridview.DataSource = ds; // On lie notre DataSet la gridView myGridview.DataBind(); // On ajoute le GridView aux lments de notre page form1.Controls.Add(myGridview);

14/09/08

19

XML (ADO.NET)

VB.NET

Dim ds As DataSet = New DataSet() ' On cre un dataset Dim dt As DataTable = New DataTable("myTable") ' On cre un datable dt.Columns.Add("col1") ' On ajoute une colonne dans la table dt.Columns.Add("col2") ' Une deuxime colonne ' Ajoute une ligne = des lments dans les colonnes dt.Rows.Add("Dans col1", "Dans col2") ' Ajoute la table dans le dataset ds.Tables.Add(dt) ' On srialise notre DataSet dans un fichier XML ' La mthode Server.MapPath() permet de rcuprer le chemin racine de votre application ds.WriteXml(Server.MapPath("test.xml")) ds.Dispose() ' On libre les ressources ds.Reset() ' Vide lobjet et le remet son tat initial ' On rcupre dans un DataSet notre XML que lon affiche dans une GridView il est noter quici on utilise le mme DataSet. Il est bien entendu possible den crer un autre. ds.ReadXml(Server.MapPath("test.xml")) Dim myGridview As GridView = New GridView() ' On cre un nouvelle GridView ' On lui indique la source de donnes ici notre DataSet myGridview.DataSource = ds ' On lie notre DataSet la gridView myGridview.DataBind() ' On ajoute le GridView aux lments de notre page form1.Controls.Add(myGridview)

Lexemple ci-dessus permet de srialiser un DataSet dans un fichier XML. Une fois les ressources libres et nettoy notre DataSet ds retourne NULL (toutes les valeurs contenues dans le DataSet sont effaces). On peut dsormais le rutiliser pour rcuprer les valeurs contenue dans test.xml fraichement cr. Dans le cas o on aurait voulu conserver notre DataSet ds, il est tout fait faisable de crer un autre DataSet afin dy stocker les donnes de test.xml . Tout dpendra du rle du DataSet dans notre application.

5 Conclusion
Pour conclure cette partie vous devez savoir manipuler un document Xml. C'est--dire savoir rcuprer les parties qui sont intressantes, que ce soit pour de laffichage ou non, grce aux mthodes comme DocumentElement qui rcupre le nud racine, ChildNodes qui rcupre une liste des nuds enfants Vous devez aussi savoir comment on modifie les donnes rcuprs, comment on les supprime et comment on les remplace (notamment avec ReplaceChild). Dans le but de bien russir cela vous devez connaitre chaque partie de la constitution dun document Xml. Entre autre ce sont les XmlElement, XmlNode, XmlDocument, XmlAttribute, XmlComment . Une autre chose savoir est le passage du Xml au DataSet et inversement grce ReadXml et WriteXml. 14/09/08