Diskussion: Wie parse ich XML mit PHP?

Ayom-Team

Angesehenes Mitglied
Diskussion zum Artikel Wie parse ich XML mit PHP?
in der Kategorie
PHP, Mysql & Apache

"php xml parsen"

Diese Funktion stammt aus der Free Amazon Web Service Funktionen Sammlung www.chipdir.nl/amazon/ und das Copyright liegt bei Jaap van Ganswijk

Beschreibung: Es geht darum eine XML Datei in einen PHP Array zu schreiben, um den im weiteren Scipt zu verwenden.
Es ist aber nötig die Namen der XML Felder zu kennen. Wenn du diese noch nicht kennt, kann man die Testfunktion ausführen (Ungetestete Funktion).
Um den Code zu kopieren benutze die Edit Funktion.

Benutzungsbeispiel:
CODE $xml = "<xmlfeld>
<unterfeld>Text 1</unterfeld>
<unterfeld>Text 2</unterfled>
</xmlfeld>";

$arr = xml2array($xml);

//Die Arrayfelder:

$arr['xmlfeld']['unterfeld'][0] = "Text 1";
$arr['xmlfeld']['unterfeld'][1] = "Text 2";


Testfunktion
Beschreibung: Benutzt xml2array und gibt den ganzen Array aus. Input: XML-String (dh das xml-file)
CODE
$file = file("datei.xml");
$xmlstring = join("", $file);

$arr = xml2array($xmlstring);

do_printR($arr);

function do_printR($arr) {
while (list($k,$v) = each($arr)) {
if (is_array($arr[$k])) {
echo $k.": Array<br>";
do_printR($arr[$k]);
} else {
echo $k.": ".$v."<br>";
}
}
}

Funktion um XML in PHP Array umzuwandeln
Input: Korrekter XML Code
Output: Array mit allen Werten
Die Funktion xml2array wandelt einen XML String in einen Array um.
CODE
function xml2array($s) {
if ($Atmp1=explode('>',$s,2)
/* && ereg('^<\?(xml .*)\?$',$Atmp1[0],$Atmp2)*/) {
//$A['xml']=$Atmp2[1];
//XML Version, kümmert niemanden
//funktioniert nur bei korrekten XML eingaben
xml2array_sub($A,$Atmp1[1]);
}
return $A;
}
function xml2array_sub(&$A,$s) {
global $error_msg;

for ($c=0;ereg('<([^<>/ ]*)( [^<>]*)?/>(.*)',$s,$Atmp1) or
ereg('<([^<>/ ]*)( [^<>]*)?>(.*)',$s,$Atmp1) and
$Atmp2=explode('</'.$Atmp1[1].'>',$Atmp1[3],2);++$c) {
$E=array();
$tag=$Atmp1[1];
if ($Atmp1[2]) {
$Atmp3=explode(' ',substr($Atmp1[2],1));
foreach ($Atmp3 as $d) {
$Atmp4=explode('=',$d,2);
$Atmp4[1]=ereg_replace('^"(.*)"$','\1',$Atmp4[1]);
$E[$Atmp4[0]]=$Atmp4[1];
}
}
if ($Atmp2) {
if (!xml2array_sub($E,$Atmp2[0])) {
$E=$Atmp2[0];
}
$s=$Atmp2[1]; //rest of the xml-code
$Atmp2=false;
}
else {
$s=$Atmp1[3]; //rest of the xml-code
}
if ($A[$tag]) { //does it already exist?
//not already a numberically indexed array?
if (!is_array($A[$tag]) or !$A[$tag][0]) {
$Atag=$A[$tag]; //remove element again
unset($A[$tag]);
//make old element first element of it's former self
$A[$tag][]=$Atag;
}
if ($E) {
$A[$tag][]=$E; //add new element
}
}
else {
if ($E) {
$A[$tag]=$E;
if ($tag=='$ErrorMsg') $error_msg=$E;
}
}
}
return $c;
}

Diese Funktion stammt aus der Amazon Web Service Sammlung www.chipdir.nl/amazon/ und das Copyright liegt bei Jaap van Ganswijk

Threads:
Thema: xml mit php parsen

-------------------
Dieser Artikel steht unter der Creative Commons Lizenz.
 
das heißt doch nicht das es veraltet ist... nur, dass es Neueres gibt...
aber trotzdem wird es noch eine lange Zeit genutzt, PHP5 ist schließlich nichtmal annähernd im Produktiv-Stadium. Wer also Wert auf Sicherheit legt, nutzt weiterhin den Version4-Zweig... und damit die "veraltete" Version der Lib
 
QUOTE (Maik @ Di 2.1.2007, 5:56) [...] PHP5 ist schließlich nichtmal annähernd im Produktiv-Stadium. Wer also Wert auf Sicherheit legt, nutzt weiterhin den Version4-Zweig... [...]

Quelle?
 
Wenn Du keine Quelle hast, dann müssten meine bisherigen Informationen stimmen, dass man die aktuellste PHP (Momentan 5.2.0) verwenden sollte. Dies wird auch von den PHP-Entwickler empfohlen, da PHP 5 vorrangig weiterentwickelt wird.
Einige externe Personen pflegen wohl die Packete für PHP 4.4.x schneller nach, wie z.B. es bei Debian der Fall ist (wenn es dort nicht sowieso schon vorher gepatch wurde), aber insgesamt kann man schon sagen, dass man langsam aber sicher auf PHP 5 umsteigen sollte.

Meine Quelle: http://www.heise.de/security/news/meldung/80462


PHP 5 wird auch unter Debian Etch enthalten soll, dessen letzter Relase-Termin nach Stable für Ende des Monats angesetzt wurde. Außerdem sind in PHP 5.2 sehr schöne neue Sicherheitseinstellung hinzugekommen, die ich als sehr sinnvoll erachte.


 
QUOTE (Sascha Ahlers @ Di 2.1.2007, 0:56) Warum benutzt Ihr nur immer solche Funktionen, wenn PHP schon so viele Möglichkeiten bietet XML-Dateien zu Parsen:
Bei solchen Funktionen kann man schnell auch nicht-komforme XML-Dateien Parsen, was nicht der Sinn von XML ist.

http://www.php.net/dom
http://www.php.net/xml
http://www.php.net/xmlreader

Klingt sehr gut, hast du vielleicht eine Idee wo ich dazu ein Tutorial finde oder direkte Beispiele mit der Amazon XML Schnittstelle?

Danke vorab!
 
Nein, dazu habe ich nichts, ich würde aber wohl eher die SOAP Schnittstelle von Amazon und die PHP SOAP-Funktionen benutzen.
 
Zurück
Oben