XML/XPATH Blätterfunktion

monoblock

Mitglied
Hallo!

Kann mir jemand bezüglich einer Art Blätterfunktion helfen? Die Sache ist allerdings etwas koplizierter, da ich die XML Datei erst mit einem Script komplett auslese, um eine Listenseite zu haben, von der aus ich dann auf eine Detailseite komme, die den kompletten Inhalt eines bestimmten Childelements anzeigt. Und auf dieser Seite sollen zwei Buttons sein (vor und zurück) mit denen man sich durch die Childelemente "hangeln" kann.

Nun muss ich auf der Detailseite die aktuelle Position bestimmen, also welches Child grade aktiv ist und dann das nächste bzw. vorherige Childelement finden, daraus das <txt>-Child auslesen und in einen Link packen können.

Wenn ich zB im Parent "test1" und Child "Test" aktiv bin müsste der Link zur nächsten Seite ungefähr so aussehen:

http://test.de/script.php?p=test1&c=Test1

Das interessante für mich ist halt eine Funktion um mich durch die Childelemte zu loopen, wie ich die Parentelemente auswähle weiß ich, und wie ich Childelemte mit einem bestimmten Inhalt finde weiß ich auch, aber halt nicht, wie ich das nächste Childelement finde...

Ich hoffe das hier klingt nicht allzu verwirrend :)

Gruß
Dominik


Code:
<root>
  <parent id="test1">
    <child>
      <txt>Test</txt>
    </child>
    <child>
      <txt>Test1</txt>
    </child>
    <child>
      <txt>Test2</txt>
    </child>
  </parent>
  <parent id="test2">
    <child>
      <txt>Test</txt>
    </child>
    <child>
      <txt>Tes1t</txt>
    </child>
    <child>
      <txt>Test2</txt>
    </child>
  </parent>
</root>
 
Hi Dominik,

rein über XPath geht das mit "/pfad/zum/child/following-sibling::*" bzw. "/pfad/zum/child/preceding-sibling::*". Wenn Du die DOM-Klassen verwendest, bieten sich da noch die Eigenschaften "previousSibling" und "nextSibling" der DOMNode-Klasse an.

LG
 
Ah, danke :) Sehr geil! Ich habe mich echt totgesucht und bin auch schon auf "siblings" gestoßen, habe allerdings in dem Zusammenhang nichts mit following-sibling bzw. preceding-sibling gesehen und "sibling" wieder als Ansatz verworfen. Aber so kann man sich irren^^
 
Also, es geht jetzt alles nur ist mein Code noch extrem lang (wie ich finde), kann man den irgendwie kürzen? Danke schon mal für die bisherige Hilfe!

PHP:
	$get_first = "//model[@id='".$src[2]."']/item[1]";
	$get_last = "//model[@id='".$src[2]."']/item[position()=last()]";
	$get_next = "//model[@id='".$src[2]."']/item[pic='".$src[3]."']/following-sibling::item[1]";
	$get_prev = "//model[@id='".$src[2]."']/item[pic='".$src[3]."']/preceding-sibling::item[1]";
	$set_next = $data->xpath($get_next);
	$set_prev = $data->xpath($get_prev);
	$set_first = $data->xpath($get_first);
	$set_last = $data->xpath($get_last);
	$next = $set_next[0]->pic;
	$prev = $set_prev[0]->pic;
	$first = $set_first[0]->pic;
	$last = $set_last[0]->pic;
	
	if ($next == "") {$next = $first;} else {}
	if ($prev == "") {$prev = $last;} else {}
 
Na ja, extrem finde ich das jetzt nicht. Aber Deine "$get_" - Variablen sind z.B. überflüssig. Den XPath-String würde ich direkt in die Methode stecken. Zumindest erhöhen die Variablen für mich die Übersicht nicht. Im Gegenteil.

Wenn Du DOM statt simpleXML verwendest, kriegst Du das vielleicht auch noch kürzer hin.

LG
 
Habe ich auch schon überlegt, aber von DOM hat mich abgehalten, dass ich es nicht auf
Anhieb verstanden habe (ich weiß, dass ist die falsche Einstellung), aber es ging darum
so schnell wie möglich ein Script von mySQL auf XML umzustellen und mit simpleXML habe
ich es in wenigen Stunden geschafft.

Ist DOM denn sehr viel performanter (habe mal so etwas gehört)? Dann würde ich mich da mal dran setzten :)

Kannst du mir vielleicht Ressourcen (außer die offiziellen Docs von PHP) empfehlen?

Gruß mit Hut :)
 
Hi,

Ist DOM denn sehr viel performanter (habe mal so etwas gehört)? Dann würde ich mich da mal dran setzten :)

Keine Ahnung. War das nicht eher umgekehrt?
Hatte das Umstellen von MySQL auf XML einen bestimmten Grund?

Kannst du mir vielleicht Ressourcen (außer die offiziellen Docs von PHP) empfehlen?

Kann ich Dir nicht mit dienen, da ich fast ausschließlich das Manual benutze. Aber wenn Du mal nach "php dom tutorial" googelst, sollte sich was finden. Vielleicht wirst Du auch hier bei den Tutorials fündig.

LG
 
Zurück