none
Parser Fichier XML/Accés aux attributs d'un noeud RRS feed

  • Question

  •  

    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><br>");

    //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 + "<br>");

    => 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 + "<br>");

    => Ici, j'obtiens le message d'erreur suivant (alors que pour d'autres attributs cela marche) :

     

     Server Error in '/Savoirs' Application.


    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 + "<br>");
    Line 55:                 Response.Write(noeud.Attributes[1].InnerText + "<br>");
    Line 56:                 Response.Write(noeud.Attributes["CVSS_impact_subscore"].InnerText + "<br>");
    Line 57:                 Response.Write(noeud.Attributes["published"].InnerText + "<br>");
    Line 58:                 Response.Write(noeud.Attributes["type"].InnerText + "<br>");
    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.

    lundi 21 juillet 2008 08:29

Toutes les réponses

  •  

    Salut,

      l'erreur que tu as c'est que tu fais un ".InnerText" sur un objet null (ici noeud.Attributes["CVSS_impact_subscore"])

    une solution serait de tester avant de faire le "InnerText" :

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

      response.write( noeud.Attributes["CVSS_impact_subscore"].InnerText );

     

    la collection noeud.Attributes ne poséde pas un ".ContainsKey" ou un truc du genre ? ca te permettrai de tester plus proprement... Smile

     

    bon courage et dis moi si j'suis a coté de la plaque Wink

    ++

        Stéphane

    mardi 29 juillet 2008 15:13