XML File Auslesen und Verarbeiten



  • Laesst sich das ganze nicht mit den String kommands loesen??



  • doch, wenn du dir die arbeit machen willst



  • Mit einem XML Parser wie tinyXML, libxml oder (evtl. etwas overkill) QtXml aus der Qt Bibliothek bist du 1. auf der sicheren Seite was das XML Format angeht (Stichwort Kommentare, CDATA, ...) und 2. ist es bequemer und effizienter in der Entwicklung.

    Wenn du tatsächlich nur die Tags *entfernen* möchtest, ist ein RegEx oder eine Schleife schneller in der Ausführung. Würde dir aber trotzdem auch zu einer XML Bibliothek raten.

    Beste Grüße,

    Alexander



  • Ich habe neulich rapidxml ausprobiert. Kann man empfehlen. rapidxml ist ein in-situ DOM parser.



  • PugiXML, MSXML wären auch noch zu nennen.



  • Wow so viele Moeglichkeiten nach Rom zu kommen 😉

    Nach euren Vorschlaegen wuerd ich es jetzt gern mit tinyxml probieren, finde jedoch kein deutsch sprachiges Tutorial!
    Bin leider extrem unbegabt was die Programmierung angeht..



  • Bin leider extrem unbegabt was die Programmierung angeht..

    Dann würds ich einfach lassen.



  • Danke fuer deinen Sinneserguss, die Option bleibt leider aussen vor.
    Jemand noch einen Konstruktiven Beitrag zum Thema Tutorial?
    Frohes Neues uebrigens!



  • auch wenn man nicht so begabt im programmieren ist, darf man google nutzen
    Google: c++ tutorial rapidxml
    Google: c++ tutorial tinyXML
    Google: c++ tutorial libxml
    Google: c++ tutorial QtXml



  • Hallo Ideenlos,

    versuche Dich von dem Gedanken "XML ist ein Text, aus dem man Teile herausschneiden muss" zu lösen und nimm statt dessen "XML ist die Repräsentation einer baumartigen Datenstruktur". Denn eigentlich willst Du ja nur die eingebetteten Daten haben und ausgeben bzw. weiterverarbeiten.

    Diese Datenstruktur hat:
    - Knoten (die Tags bzw. Elemente), und diese:
    - evtl. Attribute (das, was hinter dem Tagnamen in den < >-Klammern mit drin ist)
    - Textinhalte oder
    - ggf. Kinder und/oder
    - ggf. Nachbarknoten

    Daneben gibt es weitere Dinge wie Kommentare und die xml-Deklaration, beides dürfte bei Deiner Anwendung aber keine Rolle spielen, da Du ja "nur" die Texte ausgeben sollst.

    Wenn Dein XML z.B. so aussieht (Deklaration ignoriert):

    <Personen>
        <Person>
            <Name>Alfred</Name>
            <Alter>34</Alter>
        </Person>
        <Person>
            <Name>Berta</Name>
            <Alter>54</Alter>
        </Person>
    </Personen>
    

    dann ist die entsprechende Datenstruktur:

    Personen
      |
      +--Person
      |    |
      |    +--Name: Alfred
      |    +--Alter: 34
      |
      +--Person
           |
           +--Name: Berta
           +--Alter: 54
    

    Eine Bibliothek wie tinyXML (oder die anderen) macht folgendes:
    Du erzeugst ein Objekt und übergibst ihm Deinen XML-Text. Das Objekt parst den Inhalt und stellt die enthaltene Datenstruktur bereit. Um die ganzen Tags und die Grammatik brauchst Du Dich nicht mehr zu kümmern. Die sind nur eine Art "Transporter" (beim Umzug interessiert Dich ja auch nicht der Möbelwagen, sondern die Möbel). Zudem kannst Du die Grammatik-Feinheiten ignorieren, weil das alles tinyXML erledigt, z.B. bei leeren Elementen:
    <Person></Person>
    oder
    <Person />

    Du kannst nun von einem Datenelement zum nächsten springen und Dir je nach Bedarf Attribute oder Texte ausgeben lassen. Bei tinyXML kriegt Du mit Methoden wie FirstChild( ) oder NextSiblingElement( ) o.ä. einen Pointer zurück, der auf das gewünschte Element zeigt (oder NULL ist, wenn es eben keinen weiteren Geschwisterknoten gibt). Auf diese Weise arbeitest Du auf der Datenebene und nicht mehr auf der Textebene.

    Leider wirst Du wohl um ein wenig Englisch nicht herumkommen - oder Du findest noch ein paar Beispiele auf deutsch.
    Ansonsten brauchst Du aber nur eine Handvoll Befehle der Bibliothek zu kennen, zudem sind die header-Dateien von tinyXML auch recht gut dokumentiert, um mit etwas Probieren schnell die richtige Handvoll zu finden.



  • @minastaros: Vielen Dank, das hat mir im Verstaendnis sehr weitergeholfen, habe zwar mittlerweile eine Loesung mit C gefunden, werde mir das ganze aber dennoch im Hinterkopf behalten, Danke nochmal!

    @BigNeal: Ist aber alles auf englisch, fragestellung bitte beachten bevor der wiseguy kommt! 😋

    Trotzdessen nochmal danke an die helfenden im Thread!

    Beste Grueße Ideevoll 😉


Anmelden zum Antworten