Accueil > Forum > > > > Récupérer infos dans un fichier xml,j'arrive pas sur une structure à plusieur niveau
Récupérer infos dans un fichier xml,j'arrive pas sur une structure à plusieur niveau
mardi 2 mai 2006 à 11:49:10 |
Récupérer infos dans un fichier xml,j'arrive pas sur une structure à plusieur niveau

fcolo
|
Bonjour, je fais appel à vous car je n'arrive pas à naviguer dans un fichier xml. Ce fichier devrait avoir cette structure: <configuration> <defaultNbSecDetectInactivite>5</defaultNbSecDetectInactivite> <defaultNbImgSec>9</defaultNbImgSec> <defaultScruteCamTime>0</defaultScruteCamTime> <nbcam>2</nbcam> <listcam> <camera> <id>1</id> <nom>cam1</nom> <url>url1</url> <user>user1</user> <pass>pass1</pass> </camera> <camera> <id>2</id> <nom>cam2</nom> <url>url2</url> <user>user2</user> <pass>pass2</pass> </camera> </listcam> </configuration>mais il est dans un IsoledStorage donc je ne peux pas voir vraiment à quoi il ressemble. Je le crée ainsi: Les variables defaultxxx sont des int, listCam un dictionnaire qui contient une structure (camera avec les membres name, url, user et pass). private void save() { IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly(); XmlTextWriter tw = null; try { tw = new XmlTextWriter(new IsolatedStorageFileStream(initFileName, FileMode.Create, FileAccess.Write, store),null); //tw.WriteComment("Fichier de sauvegarde des préférences et des configurations"); tw.WriteStartDocument(); tw.WriteStartElement("configuration"); tw.WriteStartElement("defaultNbSecDetectInactivite"); tw.WriteString(defaultNbSecDetectInactivite.ToString()); tw.WriteEndElement(); tw.WriteStartElement("defaultNbImgSec"); tw.WriteString(defaultNbImgSec.ToString()); tw.WriteEndElement(); tw.WriteStartElement("defaultScruteCamTime"); tw.WriteString(defaultScruteCamTime.ToString()); tw.WriteEndElement(); tw.WriteStartElement("nbcam"); tw.WriteString(listCam.Count.ToString()); tw.WriteEndElement(); tw.WriteStartElement("listcam"); String[] liste = new String[listCam.Count]; listCam.Keys.CopyTo(liste,0); //copie les clés dans le tableau de String for(int i = 0; i<listCam.Count; i++) { tw.WriteStartElement("camera"); camera cam = (camera)listCam[liste[i]]; tw.WriteStartElement("id"); tw.WriteString(i.ToString()); tw.WriteEndElement(); tw.WriteStartElement("name"); tw.WriteString(cam.name); tw.WriteEndElement(); tw.WriteStartElement("url"); tw.WriteString(cam.url); tw.WriteEndElement(); tw.WriteStartElement("user"); tw.WriteString(cam.user); tw.WriteEndElement(); tw.WriteStartElement("pass"); tw.WriteString(cam.pass); tw.WriteEndElement(); tw.WriteEndElement(); } tw.WriteEndElement(); //fin de listcam tw.WriteEndElement(); //fin de configuration tw.WriteEndDocument(); tw.Flush(); tw.Close(); } catch { } finally { if(tw != null) { tw.Close(); } } }
et je le lis à partir des fonctions suivante: private void load() { IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly(); if ( store.GetFileNames( initFileName ).Length != 0 ) { this.defaultNbImgSec = Convert.ToInt32(getConfigValue("defaultNbImgSec",store)); this.defaultNbSecDetectInactivite = Convert.ToInt32(getConfigValue("defaultNbSecDetectInactivite",store)); this.defaultScruteCamTime = Convert.ToInt32(getConfigValue("defaultScruteCamTime",store)); MessageBox.Show("conf"+getConfigValue("nbcam",store)); if(Convert.ToInt32(getConfigValue("nbcam",store))>0) { int nbcam = Convert.ToInt32(getConfigValue("nbcam",store)); MessageBox.Show("nbcam"+nbcam.ToString()); for(int i = 1;i <=nbcam ; i++) { MessageBox.Show("cam"+i.ToString()); camera cam = getCAm(i,store); if(cam.name.CompareTo("")!=0) { listCam.Add(cam.name,cam); ajoutItemContextMenu(cam.name); } } } } }private String getConfigValue(String param,IsolatedStorageFile store) { XmlTextReader tr = null; try { tr = new XmlTextReader(new IsolatedStorageFileStream(initFileName, FileMode.Open, FileAccess.Read, store)); while(tr.Read()) { XmlNodeType NodeType = tr.NodeType; if( NodeType == XmlNodeType.Element ) { if (tr.Name.Equals(param)) { return tr.ReadString(); } } } } catch (Exception e) { MessageBox.Show(e.ToString()); return ""; } finally { if(tr != null) { tr.Close(); } } return ""; }private camera getCAm(int number,IsolatedStorageFile store) { camera cam; cam.name = ""; cam.url = ""; cam.user = ""; cam.pass = ""; if(Convert.ToInt32(getConfigValue("nbcam",store))>0) { if(number <= Convert.ToInt32(getConfigValue("nbcam",store))) { XmlTextReader tr = null; try { tr = new XmlTextReader(new IsolatedStorageFileStream(initFileName, FileMode.Open, FileAccess.Read, store)); while(tr.Read()) { XmlNodeType NodeType = tr.NodeType; if( NodeType == XmlNodeType.Element ) { if (tr.Name.Equals("listcam")) { if(tr.MoveToFirstAttribute()) { do { if(tr.Name.Equals(number.ToString())) { tr.MoveToFirstAttribute(); cam.name = tr.GetAttribute("name"); cam.url = tr.GetAttribute("url"); cam.user = tr.GetAttribute("user"); cam.pass = tr.GetAttribute("pass"); return cam; } } while(tr.MoveToFirstAttribute()); throw new Exception(string.Format("?Caméra demandée non presente dans le fichier de configuration.")); } else { throw new Exception(string.Format("Caméra demandée non presente dans le fichier de configuration.")); } } } } } catch (Exception e) { cam.name = ""; cam.url = ""; cam.user = ""; cam.pass = ""; MessageBox.Show(e.ToString()); return cam; } finally { if(tr != null) { tr.Close(); } } } else { throw new Exception(string.Format("Numéro de caméra demandée supérieur au nombre de caméra disponible.")); } } else { throw new Exception(string.Format("Aucune caméra présente dans le fichier de configuration.")); } return cam; }
Il me lève mon exception lorsque j'essais de récupérer les caméras enregistrées: Exception(string.Format("Caméra demandée non presente dans le fichier de configuration.")); alors que, normalement, ce noeud est présent. par contre, pour les autres paramétres, je n'ai aucun problème, juste lorsque je veux récupérer les informations d'une caméra. Savez vous où je fais l'erreur? Je pense que je ne sais pas descendre dans le noeud enfant (ici le numéro de ma caméra) donc qu'il ne la trouve pas. En fait, je ne sais pas naviguer dans un fichier XML, j'ai regardé des exemple sur le forum mais je ne m'en sors pas pour mon cas. Si vous pouviez m'aider ce serait sympas. Merci f.colo
|
|
mardi 2 mai 2006 à 18:41:09 |
Re : Récupérer infos dans un fichier xml,j'arrive pas sur une structure à plusieur niveau

kmikaz
|
Salut cher ami, Pour descendre dans les noeuds fils d'un noeud, il faut deja tester s'il en existe puis utiliser la propriété .ChildNodes qui represente une collection xmlNode. Exemple de lecture récusirve (le terme n'est pas forcément approprié) XmlNodeList node = doc.GetElementsByTagName("list_cam"); if (node.Count != 0) { foreach(XmlNode nod1 in nod.ChildNodes) { switch(nod1.Name) { case "camera": LoadInformationsCamera(nod1); break; } } } Voici un exemple rapide. Si tu ten sors fais msigne.
|
|
mercredi 3 mai 2006 à 09:57:44 |
Re : Récupérer infos dans un fichier xml,j'arrive pas sur une structure à plusieur niveau

sebseb42
|
juste une petite precision, tu peux t'epargner le premier if car si tu n'as pas de fils, le foreach sort immediatement. (je n'ai jamais vu, a ma connaissance, la propriété ChildNodes renvoyer null)
|
|
Cette discussion est classée dans : name, tr, cam, tw, store
Répondre à ce message
Sujets en rapport avec ce message
affichier le name d'un fichier dans un label [ par testicool ]
ki peux me donner une fonction csharp qui me renvoie le nom d'un fichier que j'ai ouvert(System.IO.Stream strInput = openFileDialog1.OpenFile();......
User.Identity.Name help [ par mathnel ]
je cherche a recuperer le nom de la personne qui se connecte. Pour cela j'utilse cecistring CurUser;CurUser=User.Identity.Name.ToLower();Je n'ai pas d
probleme pour afficher une string dans une datagrid [ par clem06 ]
bonjour a tous,g un probleme pour afficher une simple string dans une datagrid. G essayer pas mal de facon que g trouver sur internet, mais rien ne ma
Comment passer en parametre un dataset à une store proc en C#! [ par dragao54 ]
Bonjour!Quelqu'un sait il s'il est possible de passer un dataset en parametre à une stored procedureecrite en C#.Il paraitrait que cela est possible
Execption a l'ouverture d'un fichier [ par _Bao_ ]
Salut,j'ai le meme probleme qu'avait Scoubidou (j'ai essaye son truc mais ca n'a pas marche), j'ai une exception (The process cannot access the file "
Recuperer l'instance name d'un performance counter [ par Tsu91 ]
Bonjour,Ma question est simple, comment recuperer la valeur de l'instance nam d'un performance counter ? Car en effet suivant les machines, c'est pas
DataSet XSD et XSD.exe [ par hzourmba ]
Salut,Je bagarre avec une erreur en voulant creer un XSD-DataSet dans .NET. Je recois l'erreur suivante des que je compte ajouter en reference dans le
ajout, modification, suppression dans XML [ par tmcuh ]
Bonjour j'aurais aimé trouver une technique pour ajouter, mettre à jour et supprimer des données dans mon fichier xml, je cherche mais je trouve pas.
type or namespace name frame_bidule could not be found.... [ par engelho ]
Bonjour,Dans un projet visual studio développé en c#, j'ai eut besoin d'intégrer un iframe afin d'afficher une image gérée par un script asp.Ma premiè
Xml dans Datagrid [ par sevenace ]
Au secours!J'ai un fichier Xml de ce type: xml version="1.0" ?> <DIV
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|