4.3k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
ich hatte vor mit folgendem code alle inhalte einer xml-datei mit dem selben tag der reihe nach ausgeben zu lassen:

$xml = simplexml_load_file('demo.xml');
for ($seite = 0; $seite < $anzahl; $seite++) {
echo $xml->seite[$seite];
}

aber ich weiß nicht, wie ich auf $anzahl kommen sollen. wie kann ich das ermitteln?

6 Antworten

0 Punkte
Beantwortet von
ich hätte ja gedacht, da wüsste sofort jemand eine antwort. jetzt hab ich die lösung selbst gefunden:

$xml = simplexml_load_file('demo.xml');

for ($seite = 0; $seite < $seite+1; $seite++) {
if ($xml->seite[$seite] == '') exit;
echo $xml->seite[$seite];
}
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Du kannst auch einfach mit foreach() über alle Elemente iterieren, ohne die Anzahl vorab kennen zu müssen:

foreach ( $xml->seite as $s)
{
echo "$s\n";
}


siehe auch Manual auf PHP.NET, Beispiel #4
0 Punkte
Beantwortet von
und wieso nicht:

foreach ( $xml->seite as $s)
{
echo $s;
}


? und wenn ich dann darin auf ein untergeordnetes element zugreifen will, wo krieg ich dann den wert in der eckigen klammer her: $xml->seite[$seite]->seitenname

?
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Das ist jetzt zu schwammig gefragt. Vielleicht nochmal ein paar Beispiele, was alles möglich ist. Ansonsten musst du detaillierter fragen, was genau du meinst. Oder am besten uns die Ausgabe des letzten Beispieles zukommen lassen.

Alle Elemente eines Felds ausgeben:
foreach( $xml->seite as $key1=> $val1 ) {
echo "Key: $key1 - Value: $val1<br/>\n";
}


Die Anzahl eines Felds ermitteln:
echo "Anzahl: ". count( $xml->seite );


Struktur eines Elements ausgeben:
print_r( $xml-> seite );
0 Punkte
Beantwortet von
dann genauer:

wozu das \n ?

und wie kann ich in diesem beispiel den inhalt von <name></name> immer zusammen mit der <seite> ausgeben, wenn ich doch gar nicht genau weiß, welche <seite> gerade ausgegeben wird:

<website>
<seite>
<name></name>
</seite>
<seite>
<name></name>
</seite>
</website>

?
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
wozu das \n ?
Damit nicht nur im HTML ein Umbruch stattfindet (<br/>), sondern auch im Quellcode selbst (\n).

Und die Lösung für dich steht als ein Beispiel direkt in der PHP-Doku: de2.php.net/manual/de/function.simplexml-load-file.php#86471. Abstrahiert auf diese XML...
<website>
<seite>
<name>eins</name>
</seite>
<seite>
<name>zwei</name>
</seite>
</website>

...sieht der Code für dich folgendermaßen aus:
<?php

$xml= simplexml_load_file( 'xml.xml' );
$iCnt= count( $xml-> seite );
for( $i1= 0; $i1< $iCnt; $i1++ ) {
echo "Seite: $i1 - Name: ". $xml-> seite[$i1]-> name. "<br/>\n";
}

?>
...