issousam
Messages postés17Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 3 septembre 2008
-
21 juil. 2008 à 11:44
issousam
Messages postés17Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 3 septembre 2008
-
21 juil. 2008 à 15:52
Bonjour,
Je m'adresse à vous car j'ai un problème au niveau de l'accés aux informations de mon fochier XML.
En effet, mon fichier XML est correctement structuré (car je le recupere d'un site) mais pour l'accés à certains attributs de mes noeuds j'obtiens un message d'erreur.
Voici le debut de mon code :
void page_load (Object sender, EventArgs E) {
XmlDocument dom = new XmlDocument();
dom.Load(MapPath("MONFICHIER.xml"));
XmlNode NoeudParent = dom.DocumentElement;
XmlNode noeud = NoeudParent.FirstChild;
do {
Response.Write("<nvd>
");
//String nn=noeud.InnerXml.Replace("<","<");
//nn=nn.Replace(">",">");
if(noeud.Attributes != null) {
Pour la ligne de code suivante (contenant l'erreur) : Response.Write(noeud.Attributes[0].InnerText + "
");
=> Ici, je fais un parcours des attributs de mon noeud mais le probleme est que,quelques lignes aprés, certains attributs disparaissent et cela me pose probleme lorsque je veux integrer ces données dans une base de données.
C'est pour cela que j'ai preferé passer directement par le nom des attributs comme suit :Response.Write(noeud.Attributes["CVSS_impact_subscore"].InnerText + "
");
=> Ici, j'obtiens le message d'erreur suivant (alors que pour d'autres attributs cela marche) :
Server Error in '/Savoirs' Application.
<hr width="100%" color="silver" size="1" />
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 54: Response.Write(noeud.Attributes[0].InnerText + "
");
Line 55: Response.Write(noeud.Attributes[1].InnerText + "
");
Line 56: Response.Write(noeud.Attributes["CVSS_impact_subscore"].InnerText + "
");
Line 57: Response.Write(noeud.Attributes["published"].InnerText + "
");
Line 58: Response.Write(noeud.Attributes["type"].InnerText + "
");
issousam
Messages postés17Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention 3 septembre 2008 21 juil. 2008 à 14:54
Merci pour ta reponse...
J'avais déjà remarque ce probleme mais je n'arrivais pas à le resoudre.
En effet, je crée bien une condition if(noeud.Attributes != null) {
Or, dans certains cas précis d'attributs, il n'existe pas donc il faut crée une condition if(noeud.Attributes == null) mais je n'arrive vraiment pas à structurer mon code pour cette condition.
Moi ce que j'essaye de lui faire passer dans le code est que si l'attribut existe -> TANT MIEUX, IL VA LE PARSER mais si l'attribut n'existe pas -> TANT PIS, ET IL LUI AFFECTE UNE VALEUR PAR DEFAUT (par exemple 0)
J'utiliseune valeur par defaut 0 car les attributs de mon noeuds seront les champs de ma base de données où seront stockés toutes les valeurs parsées.
Je ne sais pas si c'est clair, mais bon la seule chose qu'il me reste à faire c'est comme tu m'as dit : "il faut vérifier que le résultat n'est pas null avant de chercher à récupérer le texte à l'intérieur" et ça c'est un truc que je n'arrive pas à structurer en forme de code (Desolé, NOVICE en programmation C#)
Donc, si quelqu'un aurait une petite idée à me faire parvenir pour que je puisse coder cette partie manquante...