PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : XML mit PHP parsen -> Wie?



Chocwise
19.12.2004, 02:55
So, nu will ich's wissen. :D Ich hab immer ein riesen Bogen um das Thema gemacht, aber nu hab ich die Faxen dicke. ;)
Ich hab schon einige male in PHP-Scripte reingeschaut die XML-Outputs durchparsen, aber ich raff nix davon.
Hab auch schon nach Tutorials gesucht, aber raff auch davon nichts. Es kommt einem irgendwie vor, als hätte man es nicht mehr wirklich mit PHP zu tun, sondern mit einer komplett anderen Script/Programmiersprache die da das XML durchparsed.

Also gut... wie geht das nun?
Bitte keine weiteren Tutorials mehr, die mich eh nicht weiterbringen, ich brauch nur die Basic's um zu verstehen wie das überhaupt funktioniert, die Details schaff ich dann selbst. :)

Am besten zeig mir mal jemand an einem kleinen kurzen Beispiel wie ich den XML-Output beacker um das was ich rausbekomme dann im Endeffekt per echo auszugeben.
Als Beispiel nehmen wir mal diese Anordnung:


_________________________________________
| User............Banned.............By |
+---------------------------------------+
| abc...............1...............hge |
| zte...............0...............--- |
| zrm...............0...............--- |
| jrg...............1...............eet |
| hrj...............1...............wkt |
+---------------------------------------+

Kann mir das bitte jemand in einen XML-Output übersetzen und dann zeigen wie ich's mit PHP durchparsen kann um es nach eigener Vorstellung wieder auszuspucken? :)

Ich stell mir XML grundsätzlich wie eine Art Datenbankform vor bei der man gezielt auf Datensätze zugreifen kann... nur wie? :D

-CC-
19.12.2004, 05:38
Zunächst dein Code in XML...


<item>
<user>abc</user>
<banned>1</banned>
<by>hge</by>
</item>

<item>
<user>zte</user>
<banned>0</banned>
<by>---</by>
</item>
(hab mich jetzt mal auf 2 beschränkt - will auch gleich schlafen ;))



// Zuerst holen wir uns den Inhalt von xml.xml
$xml = file_get_contents('./xml.xml');

// Dann erstellen wir uns ein Array - für jedes "<item>" einen Key
$xml = str_replace('</item>', '', $xml);
$array = explode('<item>', $xml);
unset($array['0']);
/*
// Das Array sieht jetzt so aus:
[1] => "<user>abc</user><banned>1</banned><by>hge</by>"
[2] => "<user>zte</user><banned>0</banned><by>---</by>"
*/

// Das gleiche Spielchen machen wir jetzt für die einzelnen "Unterpunkte" user, banned & by
foreach ($array as $key => $string)
{
$string = str_replace('</user>', '', $string);
$string = str_replace('</banned>', '', $string);
$string = str_replace('</by>', '', $string);

// Wir exploden nun von unten nach oben und verwenden jeweils den "Reststring" für die nächsten explodes
$by = explode('<by>', $string);
$banned = explode('<banned>', $by['0']);
$user = explode('<user>', $banned['0']);

// Jetzt basteln wir uns einfach ein Array zusammen, dass die gewünschten Infos enthält
$result[] = array('user' => $user['1'], 'banned' => $banned['1'], 'by' => $by['1']);
}


Ausgabe von print_r($result):

Array
(
[0] => Array
(
[user] => abc
[banned] => 1
[by] => hge
)

[1] => Array
(
[user] => zte
[banned] => 0
[by] => ---
)
)
Das ganze ließe sich jetzt per RegEx verfeinern, wenn man z.B. die einzelnen Keys nicht kennt o.Ä. Dazu bin ich aber jetzt zu müde :p

Na, ich hoffe, du hast so halbwegs verstanden, was mein Script macht ;) Ansonsten nachfragen ;)


PS: Ich hab mal alles per str_replace() & explode() gemacht, weil ich für alles andere (RegEx), wie gesagt, zu müde bin...

Grüße,
CC

Latency
19.12.2004, 10:29
Ich stell mir XML grundsätzlich wie eine Art Datenbankform vor bei der man gezielt auf Datensätze zugreifen kann... nur wie? :D Dann wird es schleunigst Zeit dich mal ein wenig mit XML (http://de.selfhtml.org/xml/intro.htm) vertraut zu machen ;)

Jesus_666
19.12.2004, 17:06
Es gibt natürlich noch die Möglichkeit, die eingebauten Funktionen (http://www.drweb.de/programmierung/xml-php-expat.shtml) zu benutzen.

Chocwise
19.12.2004, 18:43
@ -CC-:
Danke, aber mir ging es hier tatsächlich eher um die integrierten XML-Funktionen die mir Jesus per Link präsentiert hat. ;)
Deine Lösung ist für kleinere XML-Outputs sicherlich ok, nur fürchte ich, das es bei größeren komplexeren Outputs Probleme macht, oder ein unnötig umständliches Parsingscript nötig macht. :D

@ Jesus: Narf! Verdamte Tutorials! :D
Aber ok, ich werd mich dann auch mal an dem Tut versuchen. Wenns nicht klappt, durchlöcher ich dich mit Fragen. :p