Suche in XML-Datei
René
- cgi
0 Bio0 Michael Schröpl0 René
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é
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
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
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é
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