PARSER DOCUMENT XML/Accés aux attributs d'un noeud

Résolu
issousam Messages postés 17 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 3 septembre 2008 - 21 juil. 2008 à 11:44
issousam Messages postés 17 Date d'inscription mardi 4 mars 2008 Statut Membre Derniè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 + "
");





Source File: c:\Inetpub\wwwroot\Savoirs\ParseXML.aspx    Line: 56

Stack Trace:




[NullReferenceException: Object reference not set to an instance of an object.]
ASP.parsexml_aspx.page_load(Object sender, EventArgs E) in c:\Inetpub\wwwroot\SITE_COTIC\Savoirs\ParseXML.aspx:56
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061



 


Merci de me repondre si vous avez une quelconque idée qui puisse m'aider à avancer.

4 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
21 juil. 2008 à 15:08
En gros :

if (noeud.Attributes["CVSS_impact_subscore"]!= null){
}
else{...}

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
21 juil. 2008 à 13:13
Hello,

Tu le dis toi même, certains attributs ne sont pas présents.
si tu fais

noeud.Attributes["CVSS_impact_subscore"]

il faut vérifier que le résultat n'est pas null avant de chercher à récupérer le texte à l'intérieur.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
issousam Messages postés 17 Date d'inscription mardi 4 mars 2008 Statut Membre Derniè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...

Merci d'avance
0
issousam Messages postés 17 Date d'inscription mardi 4 mars 2008 Statut Membre Dernière intervention 3 septembre 2008
21 juil. 2008 à 15:52
C'est exactement ça !!!
Merci beaucoup pour ton aide...

Dieu benisse ce genre de forum !!!! et les personnes qui vous repondent en etant clair, net et précis !!!!
0
Rejoignez-nous