MSXML 4.0 auslesen eines wertes, den es nicht gib --> FEHLER



  • Hallo zusammen,

    ich möchte mit dem Borland C++Builder 5.0 und MSXML 4.0 mit folgendem Aufruf werte aus einer XML Datei lesen.
    Die XML-datei sieht z.B so aus:

    <?xml version="1.0" ?> 
    - <xml>
    - <ssheing1>
      <row TEST1="111" TEST2="222" /> 
      </ssheing1>
      </xml>
    

    Ich mache das folgender massen:

    nodeFeld->get_attributes()->getQualifiedItem(WideString("TEST1"),WideString(""))->get_text();
    

    Ist auch alle so weit in Ordnung,
    doch es kommt vor, das es TEST1 gar nicht gibt. Dann knallt es folgender Massen:

    _ASSERT:

    intf !=0 @ E:\PROGRAMME\CBUILDER\INCLUDE\VCL\utililcls.h/2868 Press[Y]es to terminate , [N]o to continue and [C]ancel to Debug

    Das kommt daher weil es den WERT gar nicht gibt.
    Ich habe schon versucht den Fehler einfach mit try & catch abzufangen, das geht aber nicht.

    Jetzt meine Frage : WIE kann ich vorher feststellen, ob es den WERT gibt oder nicht ???

    🙄

    Danke



  • Ich kenne leider MSXML nicht, da ich die mit dem BCB mitgelieferten Klassen verwende, aber die Vorgehensweise scheint ähnlich zu sein.
    Vielleicht weist Du einer temporären Variable den Rückgabewert von getQualifiedItem() zu und prüfst auf Nicht-Null.

    <IrgendwasMitItem>* item = nodeFeld->get_attributes()->getQualifiedItem(WideString("TEST1"),WideString(""));
    if (item)
      item->get_text();
    

    Bei den Borland-XML-Klassen gibt es auch die Möglichkeit, nicht bestehende XML-Elemente automatisch beim ersten Zugriff zu erzeugen.

    Gruß,

    Alexander



  • Jau , danke Dir Alexander, es ist wie Du sagst: 🙂

    IXMLDOMNodePtr tempnode;
    
     tempnode = nodeFeld->get_attributes()->getQualifiedItem(WideString(asKNOTEN),WideString(""));
    
     if(tempnode)
     {
    	return tempnode->get_text();
     }
     else
     {
    	return "";
     }
    

Anmelden zum Antworten