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