Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: [PHP dom-xml] Baum gezielt durchlaufen?
AUTOR BEITRAG
Solid

RANG Deckschrubber

#1 - 13.04 15:57

Hallo!

Ich habe eine XML Datei und frage mich nun wie ich diese ganz gezielt durchlaufen kann.

Also mir ist ja klar das ich Elemente durch deren Tagnamen finden kann, aber wie mache ich es z.b. das ich wenn ich Bücher als Objekte habe und das Genre jetzt eingrenze das ich nur noch die Namen der Sciense Fiction Bücher über die Tagnamen kriege wenn ich das will?

Also sozusagen nur noch nen Subtree durchforsten, am liebsten auch mit mehrmaliger Einschränkung wenn es geht, also z.b. Science Fiction, Goldmann Verlag, Taschenbuch oder so und dann krieg ich nur die Bücher rausgefiltert die diese Eigenschaften haben?

Wie macht man soetwas am elegantesten?
Crush (Hat seinen Status in Klammern)

RANG Deckschrubber

#2 - 13.04 16:40

Wenn du so viele Daten in einer einzigen XML Datei hast wie es sich hier anhört (hört sich nach nem ganzen Literaturverzeichnis an) und diese regelmäßig abgefragt werden soll, dann würde ich dir raten den ganzen Inhalt der XML Datei in eine SQL Datenbank zu konvertieren und die dann abzufragen.

Sollte auf jeden Fall performanter und wartungsarmer sein.
horst

RANG Prophet of Clanintern

#3 - 13.04 17:28

Wenn du auf XML nicht verzichten kannst / willst, dann schau mal ob irgendjemand eine "performante" (das Wort im Zusammenhang mit XML ist manchmal sehr dehnbar *G*) XPath Implementierung hat. Für Java und irgendwelche XMLartigen Modelle gibt es Jaxen (was ich persönlich sehr gerne mag). Allerdings brauchst du ja PHP Zeug
Solid

RANG Deckschrubber

#4 - 13.04 18:19

naja ne das nur nen Beispiel gewesen mit den Büchern hehe

Also im Prinzip ist es halt nur so das es so 3-4 Nodes in die Tiefe geht und dann werden so ca. 10 Einträge ausgelesen fertig. Lohnt nicht auf DB Basis zu machen will außerdem mich bischen in XML einarbeiten und die Möglichkeiten kennenlernen :)
horst

RANG Prophet of Clanintern

#5 - 13.04 18:53

mit xpath würde sowas so aussehen:

xpath: //books[@genre = "horror"]


sollte dir alle elemten "books" zurückliefern, deren attribut "genre" den wert "horror" hat
Solid

RANG Deckschrubber

#6 - 13.04 19:16

also is dieses xpath geeigneter für mein Vorhaben hm das ja doof weil ich mich bischen ausgekannt habe noch zumindest mit DOM, hm da ging doch für die HTMl Formulare sowas wie

document.node1.node2.genre.horror.firstChild und man bekam dieses Element wieder, geht das bei PHP DOM-XML auch irgendwie das ich die so ansprechen kann weil dann wäre es nicht sooo schwer, glaube ich, hm aber ich schau mir mal xpath an, danke schonmal.
horst

RANG Prophet of Clanintern

#7 - 13.04 19:23

es kommt drauf an was du machen willst.

DOM = Repräsentation deines XML Baums
XPath = Abfragesprache auf einzelene Elemente des XML Baums

Wenn du so ein Dokument hast:

<books>
<book genre="horror">Buch 123</book>
<book genre="fantasy">Buch 456</book>
<book genre="horror">Buch 789</book>
</books>

Dann kannst du klar mit document.getFirstChild() o.Ä. arbeiten, um geziel ein Element herauszupicken von dem du GENAU weisst wo es sich befindet.

Wenn du nun aber ein XPath Query //book[@genre="horror"] machst, dann sollte dir eine gescheite Implementierung zwei Knoten zurück geben, deren Textinhalt "Buch 123" und "Buch 789" sind.