gemapter Zugriff auf XML



  • Ich muss in einem Programm ziehmlich viel, ziehmlich häufig auf eine XML-Datei zugreifen. D.h. ich les das Teil nicht einmal ein, sondern brauchs halt laufend, weswegen der Zugriff ziehmlich schnell sein sollte. Dazu verwende ich natürlich nen DOM-Parser.

    Inzwischen mach ich mir allerdings darüber Gedanken, ob ich das Ding richtig nutze und das nicht irgendwie schneller geht.

    Ich hab z.B. folgenden XML-Knoten

    [cpp]
    <Parent_X>
    <child_I AttrA='a1' AttrB='b1' AttrC='c1'/>
    <child_I AttrA='a2' AttrB='b2' AttrC='c2'/>
    <child_I AttrA='a3' AttrB='b3' AttrC='c3'/>
    <child_II AttrX='x1' AttrY='y1' AttrZ='y1'/>
    <child_II AttrX='x2' AttrY='y2' AttrZ='y2'/>
    <ganz_viele_andere_Tags_und_Kommentare_und_was_weiss_ich_was/>
    </Parent_X>

    Und möchte jetzt schnellsmöglich den/die Childs_Type_II-Knoten haben, deren Attribut 'AttrY' den Wert 'y2' hat.

    Das mach ich dann so, dass ich irgendwie direkt ausgehend vom Knoten oder per TreeWalker oder Iterator und entsprechenden Filterfunktionen das richtige Ding raushole.

    Das geht zwar alles schön, ist aber letztendlich doch immer eine lineare Suche. Und es wär doch besser, wenn die Knoten und Kindknoten und Attribute irgendwie schlau gemapped wären, so dass ich nen schnellen Zugriff hätte. Dass mir also etwas wie node.getChildsByAttribute("child_II", "AttrX", "y2") ohne lineare Suche die gewünschten Knoten liefert.

    Lange Rede, kurze Fragen:
    Bietet mir DOM soetwas und ich sollte nur mal die Dokumentation lesen?
    Oder gibts da irgendwelche Tools? Oder muss ich alles selber backen (was ich mir kaum vorstellen kann)? 😕



  • [quote="kartoffelsack"]Ich muss in einem Programm ziehmlich viel, ziehmlich häufig auf eine XML-Datei zugreifen. D.h. ich les das Teil nicht einmal ein, sondern brauchs halt laufend, weswegen der Zugriff ziehmlich schnell sein sollte. Dazu verwende ich natürlich nen DOM-Parser.
    quote]

    --> Schnell und mehrfacher Dateizugriff passt nicht zusammen !

    Für JAVA gibts den Castor, mit dem kann man sich eine Klassenstruktur aus der XSD zusammenbauen und liest eine XML auf __einmal__ ein.
    SChreiben geht natürlich auch.
    Ob das die Antwort für dich ist, kann ich nicht sagen



  • naja, mit DOM hat man ja keinen Dateizugriff. Die ganze Datei ist ja in Baumstruktur geparst im Speicher.



  • hi

    mit dom hat ich noch nichts am hut. hab bisher nur sax verwendet.

    ist der aufbau der xml datei so einfach wie dargestellt oder geht das noch tiefer? (mehrere verschachtelungstiefen) Wenn ich die Daten heufiger brauche, Würd ich mir die irgendwo im Speicher zwischenlagern ggf in datenstruckturen die so aufbereitet sind, das ich sie gleich weiterverarbeiten kann. Problem ist halt der speicherplatz verbrauch, und das die XML datei nicht mehr so ohne weiteres um weitere elemente erweitert werden kann ohne gleich die Einleserothine zu erweitern.

    gruss Termite



  • Die Verschachtelung ist tiefer.

    Speicher ist nicht das Problem: DOM ist ja, im Gegensatz zu SAX dafür ausgelegt, dass man das Ding nicht nur einmal durchgeht sondern es in einer geparsten Struktur im Speicher hält um schnell darauf zuzugreifen.

    Es ist auch kein größeres Problem, eine Klasse zu schreiben, die ein beliebiges XML-File per SAX oder DOM liest und das ganze so Maps packt, dass man schnell darauf zugreifen kann, ohne damit die allgemeingültigkeit des XML-Formats zu unterlaufen.
    Ich kann mir irgendwie nur nicht vorstellen, dass ich der erste bin der das Problem hat, dass es dafür nichts gibt und hab auch das ungute Gefühl, dass ich da etwas bastle, was in DOM schon drinsteckt. Aber ich find zumindest bei der von mir verwendeten Implementation nix. Ich versuch mir halt grad abzugewöhnen das Rad immer neu erfinden zu wollen.



  • @kartoffelsack:

    IMHO Du kennst oder verstehst XPath oder XPointer noch nicht.
    Deshalb diese Schmerzen 😉 :
    http://www.w3.org/TR/xpath
    http://www.w3.org/XML/Linking



  • Danke! XPath ist genau was ich suche 🙂



  • Hier kommertiert und übersetzt, weil Wochenende ist 😉 :
    http://www.informatik.hu-berlin.de/~obecker/obqo/w3c-trans/xpath-de/


Anmelden zum Antworten