Php und simpleXML

Hi Leute,

ich habe ein problem mit simplexml.

ich habe folgende xml:

<?xml version="1.0" encoding="iso-8859-1" ?>Sebastian BergmannProfessionelle Softwareentwicklung mit PHP 53-89864-229-1Hakan KücükyilmazThomas M. HaasAlexander MerzPHP 53-89864-236-4

lade es rein:
$xml = simplexml_load_file(‚blub.xml‘);

wenn ich jetzt das aufrufe:
$xml->book[0]

bekomme ich logischerweise das erste element.

gebe ich
$xml->book[1]

bekomme ich logischerweise das zweite element.

gebe ich
$xml->book

bekomme ich nur das erste Elemen???

will ich jetzt eine solche foreach schleife laufen lasse:

foreach($xml->book as $b){
//irgendwas mit b;
}

wird diese Schleife nur ein Mal durchlaufen… Was ist los? Eigentlich sollte mir $xml->book doch ein array zurückgeben…

ich bin am verzweifeln…

lg

Artur

Hallo Artur,

das hätte ich auch so vermutet wie Du.
Ich bin allerdings mit SimpleXML nicht wirklich vertraut.
Ich arbeite bei meinen Projekten hauptsächlich mit Drupal und das hat ganz tolle Import / Export-Module, die auch XML und XPath ect verarbeiten.
Das macht faul :wink:

Hast Du das XML validiert?
Vermutlich schon…

Also da kann ich leider auch nicht helfen.

Gruß, REgina

Moin Artur,

leider kann ich dein Problem nicht rekonstruieren. Hast du mal etwas mehr Code drum herum, vielleicht steckt da der Fehler?

Hier mein Test:

$xml = new SimpleXMLElement(file\_get\_contents('simpleXMLExample.xml'));

echo 'static
';
echo $xml-\>book[0]-\>title . '
';
echo $xml-\>book[1]-\>title . '
';
echo '
';
echo 'foreach
';
foreach ($xml-\>book as $b) {
 echo $b-\>title . '
';
}

Ausgabe;

static
Professionelle Softwareentwicklung mit PHP 5
PHP 5

foreach
Professionelle Softwareentwicklung mit PHP 5
PHP 5
<?xml version="1.0" encoding="iso-8859-1" ?>

Sebastian Bergmann
Professionelle Softwareentwicklung mit PHP 5
3-89864-229-1

Hakan Kücükyilmaz
Thomas M. Haas
Alexander Merz
PHP 5
3-89864-236-4

Mit folgendem Code:

<?php $xml = simplexml_load_file('test.xml');<br />
foreach ($xml-\>book as $book) {
 echo $book-\>title . "\n";
}
?\>

erhalte ich das erwartete Ergebnis:

Professionelle Softwareentwicklung mit PHP 5
PHP 5

Aber damit hast du doch den selben Fehler!
Die Schleife sollte zwei mal ausgeführt werden. Du bekommst die Antwort ein Mal…

Welche PHP Version bist du unterwegs?

lg

Artur

Hallöchen,

mit deinem Code bekomme ich genau das selbe Ergebnis wie vorher…

Ich hab es jetzt über eine
for($i = 0;$ikey);$i++)
Schleife gemacht.

interessant ist, dass hier der count wieder geht :smile:

Danke!!!

lg

Artur

Hey Artur,

ich denke mal das liegt daran, dass Dein Array nur ein Element beinhaltet.
Da dem zweiten und dritte Element im XML Baum die Kindknoten für und fehlen kann sich kein korrektes Array aufbauen.

Versuch doch mal folgendes:

<?xml version="1.0" encoding="iso-8859-1" ?>Sebastian BergmannProfessionelle Softwareentwicklung mit PHP 53-89864-229-1Hakan KücükyilmazPHP 53-89864-236-4Thomas M. HaasAlexander Merz

LG Mad

… mehr auf http://www.wer-weiss-was.de/app/query/display_query?..

Die Schleife wird doch zweimal ausgeführt, sonst würde ich nicht beide Titel bekommen.

Hallo,

bevor ich dir alles abtippe :wink: hier ein sehr nützlicher Link mit der Lösung für dein Problem:

http://professionelle-softwareentwicklung-mit-php5.d…

Viele Grüße

Sebastian_

Hallo,
$xml->book ist kein Array sondern ein simple_xml_object, aber kann mit foreach gelooped werden.

foreach($xml->book as $b){
$author = $b->author;
$title = $b->title;
.usw…

echo $author.’-’.$title.’/n’;
}

Tip: encoding liebe auf UTF-8