PARSER DOCUMENT XML/Accés aux attributs d'un noeud [Résolu]

Signaler
Messages postés
17
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
3 septembre 2008
-
issousam
Messages postés
17
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
3 septembre 2008
-
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

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
52
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)
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
52
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)
Messages postés
17
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
3 septembre 2008

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
Messages postés
17
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
3 septembre 2008

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 !!!!