PHP XML verarbeiten

Registriert
Sep. 2010
Beiträge
174
Hey Leute! Ich habe folgendes Problem:
Ich habe ein PHP-Programm das per XML Datei Konfiguriert werden soll. Die XML Datei sieht wie folgt aus:
HTML:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<browser>Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.3) Gecko/2008092510 Firefox/3.0.3</browser>
<email>exampel@exampel.de</email>
<passwort>password</passwort>

Nun will ich das im PHP Script die Tag's erkannt werden, eine Variable mit dem Namen des Tags mit dem Inhalt des Tags erstellt wird. Also wäre das für dieses script:
PHP:
<?php
$browser = "Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.3) Gecko/2008092510 Firefox/3.0.3";
$email = "exampel\@exampel\.de";
$passwort = "password";
?>

Geht das? wenn ja wie?
 
Variablen erstellen ist so eine Sache. Ich würde das Problem vermutlich mit regulären Ausdrücken lösen.
Lass deinen Script die Zeile mit der XML-Version entfernen und benutze dann einen regulären Ausdruck, wie beispielsweise
Code:
@<(.*)>(.*)</(.*)>@isU

PHP:
<?php
function xmldecode($xml)
{
	// Lösche Versionszeile
	$xml = str_replace('<?xml version="1.0" encoding="ISO-8859-1" ?>', '', $xml);
	// Regexp-Pattern
	$pattern = '@<(.*)>(.*)</(.*)>@isU';
	// Erzeugt Arrays. In $array[0] sind die gefundenen Stellen enthalten, in $array[1] und $array[3] die Variablennamen und in $array[2] der Inhalt
	$result = preg_match_all($pattern, $subject, $array);
	// Gehe alle gefundenen Werte durch und füge sie zu einem Array zusammen, der als Schlüssel den Namen der späteren Variable hat.
	for($x = 0; $x < count($array[1]); $x++)
	{
		$ret[$array[1][$x]] = $array[2][$x];
	}
	return $ret;
}
// Funktionsaufruf, $var bekommt den Inhalt des Arrays.
$var= xmldecode("XMLCONTENT");
// Erzeuge aus den zurückgegebenem Array die Variablen
extract($var);
?>

Wäre jetzt eine solche Funktion, die bereits umgesetzt wurde. Ich würde dir aber empfehlen, den Regularen Ausdruck zu überarbeiten, da ich den nur so halb zusammengesetzt habe und die Lösung mit dem XML löschen auch nicht sehr elegant ist.
Außerdem ist das Script fehleranfällig, wenn ein schließender Tag irgentwo im Inhalt vorkommen kann. Stell bitte sicher, dass das nicht passiert.

Ungetestet, aber sollte funktionieren.

Was du mit Konsole meinst, weis ich jetzt nicht^^

Gutes Tutorial und Testmöglichkeit findest du auf: Regexp-Evaluator
 
Zuletzt bearbeitet:
Alles Quatsch! ;) Das Zauberwort ist DOMDocument, eine PHP5-Klasse, mit der es dermaßen einfach ist, auf XML zuzugreifen, dass du es nicht glauben wirst! =)

Kleines Beispiel:

PHP:
// DOM-Dokument instanzieren
$doc = new DOMDocument;

// Datei laden
$doc -> load($filename);

// Element auswählen
$element = $doc -> getElementByTagName("element");
$attirubte = $element -> getAttribute("attribute");

Wenn du das DOM beherrschst (zum Beispiel aus JavaScript) dann weißt du sofort, was Sache ist. Bei Fragen bitte melden! =)

PS: Dokumentation zu DOMDocument
 
Zuletzt bearbeitet:
Oh man JavaScript >>Ich hasse es!<<

Aber ich blicke in etwa durch.
PHP:
getAttribute("attribute")

Heißt das das ich das Atribute raus ziehe (<div id="schnickschnack">) oder den Inhalt zwischen anfang- & Endtag?
 
Funktionieren tut mein Beispiel auch ;) .
Aber deines ist natürlich weitaus eleganter und auch schneller, kannte ich bis jetzt noch nicht.
Ich bedank mich aufjedenfall für den Hinweis, man lernt eben nie aus.
 
master bratack schrieb:
Oh man JavaScript >>Ich hasse es!<<

Aber ich blicke in etwa durch.
PHP:
getAttribute("attribute")

Heißt das das ich das Atribute raus ziehe (<div id="schnickschnack">) oder den Inhalt zwischen anfang- & Endtag?

getAttribute() liefert dir den Wert zwischen den Quotes (falls vorhanden :P). Wenn du getAttribute("id") schreibst, erhältst du schnickschnack. :) Mit einer foreach-Schleife kann man auch wunderbar alle Elemente durchlaufen und so weiter. Ist verdammt korrekt diese API.
 
Danke S.o.T. für deinen Beitrag, ich habe nur in dieses Topic geschaut weil ich wusste, dass garantiert wieder irgendjemand mit regulären Ausdrücken angelaufen kommt.

Das ist in etwa so, als würdet ihr euren Monitor mit der Digicam abfotografieren um an einen Screenshot zu kommen.
 
Jo, da sagt ihr was. SimpleXML habe ich auch eine Zeit lang verwendet für eine Template-Engine, aber für das, was ich machen möchte, scheint mir die DOMDocument-Klasse sinnvoller zu sein. Man kann halt einfach das Wissen, das man über das DOM hat, anwenden, und muss nur die Syntax anschauen. DOM ist ja DOM, egal in welcher Sprache. :)
 
Zurück
Oben