Grundlegende SimpleXML Verwendung
Viele Beispiele in dieser Referenz benötigen einen XML-String. Anstatt diesen String in jedem Beispiel zu wiederholen, haben wir ihn als File abgelegt, das wir in den Beispielen inkludieren. Diese eingebundene Datei zeigen wir Ihnen im folgenden Beispiel. Alternativ dazu können Sie ein XML-Dokument erstellen und es mit simplexml_load_file() einlesen.
Beispiel #1 Einzubindende Datei example.php mit XML-String
<?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;
?>
Die Einfachheit von SimpleXML ist besonders deutlich erkennbar, wenn man einen String oder eine Zahl aus einem XML Dokument extrahieren will.
Beispiel #2 <plot> ermitteln
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie[0]->plot;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
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.
Um auf Elemente in einem XML-Dokument zuzugreifen, die Zeichen enthalten, die nicht dem PHP-Benennungsstandard entsprechen (z.B. der Bindestrich), können Sie den Elementnamen zwischen geschweifte Klammern und einfachen Anführungszeichen einschließen.
Beispiel #3 Auf <line> zugreifen
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie->{'great-lines'}->line;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
PHP solves all my web problems
Beispiel #4 Auf nicht-eindeutige Elemente per SimpleXML zugreifen
Existieren mehrere Instanzen eines Elements als Kinder eines einzigen Elternelements, lassen sich normale iterative Techniken einsetzen.
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
/* Für jeden <character> Knoten geben wir ein separates <name> aus. */
foreach ($movies->movie->characters->character as $character) {
echo $character->name, ' played by ', $character->actor, PHP_EOL;
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr
Hinweis:
Eigenschaften ($movies->movie im vorherigen Beispiel) sind keine Arrays. Sie sind iterierbare und zugreifbare Objekte.
Beispiel #5 Attribute verwenden
Bis jetzt haben wir nur das Auslesen von Elementnamen und ihrer Werte betrachtet. SimpleXML kann aber auch auf die Attribute eines Elements zugreifen. Der Zugriff auf die Attribute eines Elements funktioniert genauso, als würden Sie die Elemente eines Array ansprechen.
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
/* Zugriff auf die <rating> Knoten des ersten Films
* Die Bewertungsskala wird zusätzlich ausgegeben. */
foreach ($movies->movie[0]->rating as $rating) {
switch((string) $rating['type']) { // Verwende Attribute als Element-Indizes
case 'thumbs':
echo $rating, ' Daumen hoch';
break;
case 'stars':
echo $rating, ' Sterne';
break;
}
}
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
7 Daumen hoch5 Sterne
Beispiel #6 Vergleichen von Elementen und Attributen mit Text
Um ein Element oder ein Attribut mit einem String zu vergleichen oder an eine Funktion zu übergeben, die einen String als Parameter benötigt, müssen Sie das Element respektive das Attribut in einen String casten. Verwenden Sie dafür (string), ansonsten behandelt PHP das Element als Objekt.
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
if ((string) $movies->movie->title == 'PHP: Behind the Parser') {
print 'Mein Lieblingsfilm.';
}
echo htmlentities((string) $movies->movie->title);
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
My favorite movie.PHP: Behind the Parser
Beispiel #7 Zwei Elemente vergleichen
Zwei SimpleXMLElements können ab PHP 5.2.0 auch dann als unterschiedlich betrachtet werden, wenn sie auf das gleiche Element zeigen.
<?php
include 'example.php';
$movies1 = new SimpleXMLElement($xmlstr);
$movies2 = new SimpleXMLElement($xmlstr);
var_dump($movies1 == $movies2); // false ab PHP 5.2.0
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
bool(false)
Beispiel #8 XPath verwenden
SimpleXML verfügt über einen eingebauten XPath-Support. So finden Sie alle <character> Elemente:
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
foreach ($movies->xpath('//character') as $character) {
echo $character->name, ' gespielt von ', $character->actor, PHP_EOL;
}
?>
'//' wird hier als Wildcard verwendet. Um absolute Pfadangaben zu verwenden, lassen Sie einen der Slashe weg.
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
Ms. Coder gespielt von Onlivia Actora Mr. Coder gespielt von El ActÓr
Beispiel #9 Werte setzen
Die Daten in SimpleXML müssen nicht konstant sein. Das Objekt erlaubt die Veränderung all seiner Elemente.
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
$movies->movie[0]->characters->character[0]->name = 'Miss Coder';
echo $movies->asXML();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
<?xml version="1.0" standalone="yes"?> <movies> <movie> <title>PHP: Behind the Parser</title> <characters> <character> <name>Miss 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>
Beispiel #10 Elemente und Attribute hinzufügen
Seit PHP 5.1.3 verfügt SimpleXML über eine vereinfachte Möglichkeit, Kindelemente und Attribute hinzuzufügen.
<?php
include 'example.php';
$movies = new SimpleXMLElement($xmlstr);
$character = $movies->movie[0]->characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');
$rating = $movies->movie[0]->addChild('rating', 'PG');
$rating->addAttribute('type', 'mpaa');
echo $movies->asXML();
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
<?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> <character><name>Mr. Parser</name><actor>John Doe</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> <rating type="mpaa">PG</rating></movie> </movies>
Beispiel #11 DOM Interoperabilität
PHP hat einen Mechanismus, um XML-Knoten zwischen dem SimpleXML und dem DOM Format zu konvertieren. Das Beispiel zeigt, wie man ein DOM Element in SimpleXML verwandelt.
<?php
$dom = new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'Fehler beim Parsen des Dokuments';
exit;
}
$books = simplexml_import_dom($dom);
echo $books->book[0]->title;
?>
Das oben gezeigte Beispiel erzeugt folgende Ausgabe:
blah
Deutsche Übersetzung
Sie haben gebeten, diese Seite auf Deutsch zu besuchen. Momentan ist nur die Oberfläche übersetzt, aber noch nicht der gesamte Inhalt.Wenn Sie mir bei Übersetzungen helfen wollen, ist Ihr Beitrag willkommen. Alles, was Sie tun müssen, ist, sich auf der Website zu registrieren und mir eine Nachricht zu schicken, in der Sie gebeten werden, Sie der Gruppe der Übersetzer hinzuzufügen, die Ihnen die Möglichkeit gibt, die gewünschten Seiten zu übersetzen. Ein Link am Ende jeder übersetzten Seite zeigt an, dass Sie der Übersetzer sind und einen Link zu Ihrem Profil haben.
Vielen Dank im Voraus.
Dokument erstellt 30/01/2003, zuletzt geändert 26/10/2018
Quelle des gedruckten Dokuments:https://www.gaudry.be/de/php-rf-simplexml.examples-basic.html
Die Infobro ist eine persönliche Seite, deren Inhalt in meiner alleinigen Verantwortung liegt. Der Text ist unter der CreativeCommons-Lizenz (BY-NC-SA) verfügbar. Weitere Informationen auf die Nutzungsbedingungen und dem Autor.
Referenzen
Diese Verweise und Links verweisen auf Dokumente, die während des Schreibens dieser Seite konsultiert wurden, oder die zusätzliche Informationen liefern können, aber die Autoren dieser Quellen können nicht für den Inhalt dieser Seite verantwortlich gemacht werden.
Der Autor Diese Website ist allein dafür verantwortlich, wie die verschiedenen Konzepte und Freiheiten, die mit den Nachschlagewerken gemacht werden, hier dargestellt werden. Denken Sie daran, dass Sie mehrere Quellinformationen austauschen müssen, um das Risiko von Fehlern zu reduzieren.