begin process at 2010 02 09 20:11:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Au secours

 > 

Récupérer infos dans un fichier xml,j'arrive pas sur une structure à plusieur niveau


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Membre Club
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


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales