Xml auslesen



  • 1.

    Visual Studio 2005

    Ist zwar nicht dringend notwendig, aber ne neure Version wär zumindest kein Nachteil ^^
    2.

    Visual Studio [...] ähnlich wie PHP

    O.O Wie kann man ne IDE mit ner Skriptsprache vergleichen? Oo

    Zum eigentlichen Thema:
    Guck dir mal std::ifstream und std::ofstream an (entweder hier im Forum danach suchen oder direkt in der MSDN).

    Ansonsten:

    <a> 
    <b> 
    <c> 
    <d attribut="1">
    

    du machst 4 mal

    std::getline (/*dein stream zur datei*/, /*die ausgabe variable - irgend nen std::string eben*/);
    //NACH dem vierten mal: (weil dich ja nur die vierte Zeile interessiert)
    //deine ausgabevariable ist hier jz einfach mal so deklariert "std::string zeile":
    //und dann machst du so was in der art: (die fkt werden alle bissl anders heißen, aber die weiß ich jz nicht ausm kopf, sry...)
    zeile.substring (zeile.findfirst ('='), zeile.length ());
    

    Alternativ könntest du das auch gleich im Stream machen:

    //beim vierten mal so:
    std::string muell;
    std::getline (/*dein stream zur datei*/, muell, '='); //bis zum = auslesen
    std::seekg (1); //eins weiter damit du das '=' überspringst...
    int die_zahl_komma_die_du_suchst (0);
    /*dein stream zur datei*/ >> die_zahl_komma_die_du_suchst;
    

    Weiß nicht, was besser ist und was dir besser gefällt, logischer ist oder wie auch immer

    Vll hats dir ja ein wenig geholfen...

    Bye



  • Hi, danke schon mal für die Antwort.
    Habs zuerst mit Streams versucht, da wurde mir von allen Seiten gesagt, ich soll nen Parser benutzen ^^
    Vielleicht kann mir da ja noch jemand nen Tipp geben...
    Wenn da keiner weiter weiß kann ichs ja noch mal mit Streams versuchen...
    Würd mich aber trotzdem über Antworten freuen 😃

    Gruß



  • <d attribut="1">
    etc.
    Ich möchte nur wissen, ob das Attribut 1 oder 0 ist.

    für so was einfaches würde ich keinen parser nehmen sondern schon streams... (ich würde es allgemein nur mit streams machen - aber das muss ja noch lang ne heißen, dass du es auch so machen musst ^^ und der parser wird dir bestimmt ne menge arbeit abnehmen, wenn du iwann mehr auslesen willst)

    Bye



  • Janinoe schrieb:

    Habs zuerst mit Streams versucht, da wurde mir von allen Seiten gesagt, ich soll nen Parser benutzen ^^
    Vielleicht kann mir da ja noch jemand nen Tipp geben...

    Vielleicht mal im richtigen Unterforum versuchen? MSXML hört sich für mich jedenfalls nicht wie ANSI C++ an, und auch dein Code ist kein ANSI C++. Blind ins Blaue geraten: MFC.

    cu André



  • Janinoe schrieb:

    Hi, danke schon mal für die Antwort.
    Habs zuerst mit Streams versucht, da wurde mir von allen Seiten gesagt, ich soll nen Parser benutzen ^^
    Vielleicht kann mir da ja noch jemand nen Tipp geben...
    Wenn da keiner weiter weiß kann ichs ja noch mal mit Streams versuchen...
    Würd mich aber trotzdem über Antworten freuen 😃

    Gruß

    Mit Streams wirst du auf Dauer nicht glücklich werden.
    Die XML Dateien können ja z.B. beliebig mit Whitespaces "Formatiert" werden.

    Willst du es richtig machen (und dir einiges an Ärger sparen) nimm einen XML-Parser.

    Zum Auslesen der Attribute: eine Node hat eine Eigenschaft "attributes":
    http://msdn2.microsoft.com/en-us/library/ms761386(VS.85).aspx



  • Die XML Dateien können ja z.B. beliebig mit Whitespaces "Formatiert" werden.

    findfirstnot (' '); //oder iwie so ähnlich ^^
    

    aber wie schon gesagt - so bald du mehr als nur die eine zeile brauchst hast du mit dem xml-parser wahrscheinlich 20 zeilen mehr code und mit streams leicht das zehnfache...

    Bye



  • Whitespaces sind auch Zeilenumbrüche und Tabs.
    Z.B.:

    <EinTag
    
      AttributNr1              =
    
    '23' />
    

    Natürlich kann man das auch selber parsen.
    Auf den ersten Blick sieht es einfach aus und man denkt sich, es geht schneller als mit irgendeiner Lib rumzuhantieren.

    Es ist aber in jedem Fall schneller und bequemer mit einem XML-Parser, glaub mir.



  • Nur leider für mich als "Frischling" nicht so einfach 😉



  • Janinoe schrieb:

    Nur leider für mich als "Frischling" nicht so einfach 😉

    Hast du dir meinen Link angesehen?
    Sieht nicht besonders schwer aus die Attribute einer Node auszulesen.



  • Ja, gucke ich mir gerade an und probiers irgenwie umzusetzen.



  • Guten Morgen,
    habe hier einfach mal das probiert:

    void CXMLTestDlg::DisplayChildren(MSXML2::IXMLDOMNodePtr pParent)
    {
    	DisplayChild(pParent);
    
    	MSXML2::IXMLDOMNodePtr pChild;
    	for (pChild= pParent->firstChild; NULL != pChild; pChild = pChild->nextSibling)
    	{
    			pChild = pChild->attributes;
    			DisplayChildren(pChild);
    	}	
    }
    

    Habe mal so probiert an die Attribute ranzukommen.
    Kompiliert wird auch ohne zu meckern, aber beim Ausführen springt er dann in irgendson standarterzeugtes Blatt und meldet ne unbehandelte Ausnahme... 😕
    Würd mich freuen, wenn vielleicht mal jemand nen Stück Code hätte...
    Gruß Janinoe



  • Hallo,
    habs jetzt mit Hilfe eines XPath-Ausdruck hinbekommen.
    Vielen Dank für eure Hilfe. 👍
    Gruß Janinoe



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten