Brauche Hilfe beim interpretieren von einem XML-String
-
Hallo allerseits. Ich bräuchte Hilfe beim Interpretieren von XML und zwar habe ich einen ganz normalen XML String aus einer Datenbank ausgelesen und möchte nun auf die einzelnen Elemente zugreifen. Ich habe dabei diesen Code hier gefunden der genau dem entspricht was ich suche aber leider liest er die XML Daten aus einer Datei aus ich habe sie bereits in einem String und möchte bzw kann sie nicht schreiben. Hier ist das Beispiel:
<?php $xmlstr = <<<XML <?xml version='1.0' standalone='yes'?> <movies> <movie> <title>PHP: Behind the Parser</title> <characters> <character> <name>Ms. Coder</name> <actor>Onlivia Actora</actor> </character> <character> <name>Mr. Coder</name> <actor>El ActÓr</actor> </character> </characters> <plot> So, this language. It's like, a programming language. Or is it a scripting language? All is revealed in this thrilling horror spoof of a documentary. </plot> <great-lines> <line>PHP solves all my web problems</line> </great-lines> <rating type="thumbs">7</rating> <rating type="stars">5</rating> </movie> </movies> XML; ?>
<?php include 'example.php'; $xml = new SimpleXMLElement($xmlstr); echo $xml->movie->{'great-lines'}->line; // "PHP solves all my web problems" ?>
Wie kann ich diesen Code hier nun so umschreiben das er die Daten aus dem String nimmt und nicht aus einer Datei list.
Danke für eure Hifle!
-
Bei deinen Beispiel wird das XMl doch schon aus einen String erstellt.Der ist nur in einer anderen Phpdatei definiert die mit include eingebunden wird.
-
Aber bei mir funktioniert es nicht angenommen ich habe diesen XML String
<?xml version="1.0" encoding="utf-8"?> <elements> <text identifier="1d0caa0e-01da-4486-979e-caf6219b2345"> <value><![CDATA[Porsche]]></value> </text> </elements>
der in der Variable xml_string gespeichert ist.
$datensatz = new SimpleXMLElement($xml_string); echo $datensatz->elements->{'text identifier="1d0caa0e-01da-4486-979e-caf6219b2345"'}->value;
-
So ich habe mitlerweile herausgefunden das der Fehler hier auftritt
$datensatz = new SimpleXMLElement($xml_string);
Die Fehlermeldung lautet
[Mon Jul 18 10:16:58 2011] [error] [client 192.168.0.254] PHP Warning: SimpleXMLElement::__construct(): Entity: line 23: parser error : Input is not proper UTF-8, indicate encoding !\nBytes: 0xF6 0x72 0x65 0x6E in /srv/www/htdocs/vhosts/***/TEST/bearbeite_unternehmen.php on line 44, referer: http://***/TEST/login_user.php [Mon Jul 18 10:16:58 2011] [error] [client 192.168.0.254] PHP Warning: SimpleXMLElement::__construct(): <value><![CDATA[L\xf6renstra\xdfe 32]]></value> in /srv/www/htdocs/vhosts*** /TEST/bearbeite_unternehmen.php on line 44, referer:***
-
Das sollte den String nach UTF-8 konvertieren,was dein erstes Problem löst.
$xml_string = iconv ("ISO-8859-15","UTF-8",$xml_string); $datensatz = new SimpleXMLElement($xml_string);
Dein zweites Problem ist das du SimpleXMl nicht richtig verstanden hast mit {'text identifier="1d0caa0e-01da-4486-979e-caf6219b2345"'} kommst du nicht an den Tag text mit den Attribut identifier mit den Wert "1d0..." sonder er sucht nach einen Tag der "text identifier="1d0caa0e-01da-4486-979e-caf6219b2345" heisst,der natürlich in deinen XML nicht vorkommt.
Um den richtigen Tag zuwählen musst du XPath verwenden.$text = $datensatz->xpath("//text[@identifier='1d0caa0e-01da-4486-979e-caf6219b2345']"); echo $text[0]->value;
-
Funktioniert einwandfrei!
An dem Problem hänge ich jetzt schon fast 2 Stunden mir kam schon der Gedanke mir einen eigenen Interpreter zu machen xD
Vielen Dank!
-
Ist es möglich auch mit diesem Code die ausgelesen Daten auch wieder so zu schreiben also verändern?
-
Benutzer_Name schrieb:
Das sollte den String nach UTF-8 konvertieren,was dein erstes Problem löst.[/code]
Noch besser: Die Datei gleich als Unicode speichern
-
LOrdf schrieb:
Ist es möglich auch mit diesem Code die ausgelesen Daten auch wieder so zu schreiben also verändern?
ja -> vorausgesetzt du meinst das so wie ich es verstehe