René: Suche in XML-Datei

Hallo zusammen,

ich möchte in einer XML-Datei jeweils datensatzweise mit einem CGI-Skript suchen. Die Suchbegriffe werden vom Anwender in Formularfelder auf einer Webseite eingegeben und an das Skript übergeben. Mein Problem ist nun, dass ich nicht weis, wie ich in einer Schleife bei einem Durchlauf nur 1 Datensatz kontrolliere und beim nächsten Durchlauf zum nächsten Datensatz wechsle. Eine Alternative wäre vielleicht, dass ich im gesamten XML-Dokument nach dem jeweiligen Tag suche, indem sich mein Suchbegriff befinden soll (z.b. <Ort>). Da habe ich aber dann das Problem, dass ich bei einem Treffer nicht die dazugehörigen weiteren Felder des Datensatzes ausgeben kann, die sich eventuell auch in dem Datensatz befinden. Ich habe erst vor kurzem mit Perl angefangen, deshalb sind meine Kenntnisse leider noch sehr begrenzt.
Kann mir vielleicht jemand weiterhelfen oder Seiten im I-Net nennen, wo es ähnliche Skripts oder zumindest Denkanstösse und Tips gibt?

Gruss
René

  1. Sup!

    Na klar: Du installierst XML::Simple und XML::Parser und am besten alles, was mit XML:: anfängst mittels CPAN, indem Du unter Unix in der Kommandozeile eingibst perl -e shell -MCPAN und dann einfach die Module installierst.

    Du benutzt dann diese Module wie in dem perldoc-Seiten angegeben, um die XML-Datei einzulesen. Du iterierst dann in einer oder mehreren Schleifen über den Inhalt der XML-Datei, die Du wahrscheinlich z.B. von XML::Simple in einem Hash bekommst, so daß Du über die Keys des Hashes  iterieren kannst, z.B. mit foreach $item (keys(%hash)) {... do_something_with ($hash($item))...}

    Das ist alles unglaublich einfach, man muß sich nur hinreichend reinstressen, um zur Erleuchtung zu gelangen (bla).

    Gruesse,

    Bio

  2. Hi René,

    wie groß sind Deine Datenmengen?

    ich möchte in einer XML-Datei jeweils datensatzweise mit einem
    CGI-Skript suchen.

    Ich halte XML für ein prima Datenaustauschformat, gleichzeitig aber nicht
    für einen guten Datenbank-Ersatz.
    Insofern schlage ich vor, zu überlegen, ob Du Deine XML-Datei(en) nicht
    per Programm in eine für das Durchsuchen geeignetere Form "übersetzen"
    und dann in dieser Form suchen solltest. Je nach der Komplexität Deiner
    XML-Strukturen kann das auch ein relativ primitives Dateiformat sein.

    Mein Problem ist nun, dass ich nicht weis, wie ich in einer Schleife
    bei einem Durchlauf nur 1 Datensatz kontrolliere und beim nächsten
    Durchlauf zum nächsten Datensatz wechsle.

    Ist für Dich "Durchlauf" ein Synonym für "CGI-Aufruf"?
    Wenn ja, dann übergib bei jedem Aufruf die Nummer des zu verarbeitenden
    Datensatzes, d. h. erzeuge "blättern"-Links in der Ergebnisanzeige dy-namisch.

    Da habe ich aber dann das Problem, dass ich bei einem Treffer nicht
    die dazugehörigen weiteren Felder des Datensatzes ausgeben kann, die
    sich eventuell auch in dem Datensatz befinden.

    Eben - das ist das Problem.
    XML ist kein Ersatz für eine relationale Datenbank oder Ähnliches.

    Viele Grüße
          Michael

    1. Hi René,

      Hi :)

      wie groß sind Deine Datenmengen?

      im mom testweise bis 10.000 Datensätze mit je 6 Feldern. Ich brauch das für ne Praktikumsarbeit, wobei es darum geht, ne gute und schnelle Möglichkeit zu finden, in einer XML-Datei zu suchen und die gefundenen Datensätze anzuzeigen. Das XML für große Datenmengen eher ungeeignet ist, hab ich dabei schon selbst festgestellt, aber es geht erstmal nur um das Aufzeigen der Möglichkeiten, die es überhaupt gibt (inkl. ausführbarem Beispiel). :)

      Ist für Dich "Durchlauf" ein Synonym für "CGI-Aufruf"?
      Wenn ja, dann übergib bei jedem Aufruf die Nummer des zu verarbeitenden
      Datensatzes, d. h. erzeuge "blättern"-Links in der Ergebnisanzeige dy-namisch.

      Naja, mit Durchlauf meinte ich den Durchlauf der Schleife (while() oder sowas :)

      Eben - das ist das Problem.
      XML ist kein Ersatz für eine relationale Datenbank oder Ähnliches.

      da stimm ich dir zu.

      danke und gruss
      René

      1. Hi auch,

        wie groß sind Deine Datenmengen?
        im mom testweise bis 10.000 Datensätze mit je 6 Feldern.

        dazu würde ich schon "zuviel" sagen.

        Über eine Indexstruktur gewinnst Du an dieser Stelle
        schon Faktor 100 (geschätzt) an Tempo.
        (7 mal log2(10000) ~ 100, gegenüber full table scan.)

        ne gute und schnelle Möglichkeit zu finden,
        in einer XML-Datei zu suchen und die gefundenen
        Datensätze anzuzeigen.

        "Tu's nicht."

        Das XML für große Datenmengen eher ungeeignet ist,
        hab ich dabei schon selbst festgestellt, aber es
        geht erstmal nur um das Aufzeigen der Möglichkeiten,
        die es überhaupt gibt (inkl. ausführbarem Beispiel).

        Ich finde, diese Möglichkeiten sind begrenzt.

        Bei dreistelligen Werten hätte ich nichts gesagt, bei
        vierstelligen ein bißchen gegrummelt ...

        Das ist natürlich auch eine Frage der Effizienz der
        Implementierung.
        Das vorliegende Forum speichert Threads auch in XML,
        und bei den momentanen Größen geht es schon ziemlich
        in die Knie, bei Verwendung von Perl-Standardmodulen.
        Andererseits entwickelt Christian Kruse einen alterna-
        tiven XML-Parser in C (konzeptionell basierend auf lex/yacc, denke ich), welcher _erheblich_ schneller
        sein wird (weil er auch kein volles XML verstehen muß).

        Viele Grüße
        <img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.ico" border=0 alt=""> Michael