&reftitle.examples;
Grundlegende Verwendung von SimpleXML
Viele Beispiele in dieser Referenz benötigen einen XML-String. Anstatt
diesen String in jedem Beispiel zu wiederholen, legen wir ihn in einer
Datei ab, die 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.
Einzubindende Datei examples/simplexml-data.php mit XML-StringPHP: Behind the ParserMs. CoderOnlivia ActoraMr. CoderEl ActÓr
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.
PHP solves all my web problems75
XML;
?>
]]>
Die Einfachheit von SimpleXML ist besonders deutlich erkennbar, wenn man
einen String oder eine Zahl aus einem XML-Dokument extrahieren will.
<plot> ermitteln
movie[0]->plot;
?>
]]>
&example.outputs;
Um auf Elemente in einem XML-Dokument zuzugreifen, die Zeichen enthalten,
die nicht dem PHP-Benennungsstandard entsprechen (&zb; der Bindestrich),
können Sie den Elementnamen zwischen geschweifte Klammern und
einfachen Anführungszeichen einschließen.
Auf <line> zugreifen
movie->{'great-lines'}->line;
?>
]]>
&example.outputs;
Auf nicht-eindeutige Elemente per SimpleXML zugreifen
Existieren mehrere Instanzen eines Elements als Kinder eines einzigen
Elternelements, lassen sich normale iterative Techniken einsetzen.
-Knoten geben wir ein separates aus. */
foreach ($movies->movie->characters->character as $character) {
echo $character->name, ' played by ', $character->actor, PHP_EOL;
}
?>
]]>
&example.outputs;
Eigenschaften ($movies->movie im vorherigen Beispiel)
sind keine Arrays. Sie sind
iterierbare und
zugreifbare Objekte.
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;s
ansprechen.
-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;
}
}
?>
]]>
&example.outputs;
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.
movie->title == 'PHP: Behind the Parser') {
print 'Mein Lieblingsfilm.';
}
echo htmlentities((string) $movies->movie->title);
?>
]]>
&example.outputs;
Zwei Elemente vergleichen
Zwei SimpleXMLElements können auch dann als unterschiedlich betrachtet
werden, wenn sie auf das gleiche Element zeigen.
]]>
&example.outputs;
XPath verwenden
SimpleXML verfügt über eine eingebaute
XPath-Unterstützung. So können alle
<character>-Elemente gefunden werden.
'//' wird hier als Wildcard verwendet. Um absolute
Pfadangaben zu verwenden, lassen Sie einen der Schrägstriche weg:
xpath('//character') as $character) {
echo $character->name, ' gespielt von ', $character->actor, PHP_EOL;
}
?>
]]>
&example.outputs;
Werte setzen
Die Daten in SimpleXML müssen nicht konstant sein. Das Objekt erlaubt
die Veränderung all seiner Elemente.
movie[0]->characters->character[0]->name = 'Miss Coder';
echo $movies->asXML();
?>
]]>
&example.outputs;
PHP: Behind the ParserMiss CoderOnlivia ActoraMr. CoderEl ActÓr
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.
PHP solves all my web problems75
]]>
Elemente und Attribute hinzufügen
SimpleXML verfügt über eine vereinfachte Möglichkeit, Kindelemente und
Attribute hinzuzufügen.
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();
?>
]]>
&example.outputs;
PHP: Behind the ParserMs. CoderOnlivia ActoraMr. CoderEl ActÓrMr. ParserJohn Doe
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.
PHP solves all my web problems75PG
]]>
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.
loadXML('blah');
if (!$dom) {
echo 'Fehler beim Parsen des Dokuments';
exit;
}
$books = simplexml_import_dom($dom);
echo $books->book[0]->title;
?>
]]>
&example.outputs;
Verwenden von NamensräumenOnlivia Actora
XML;
$movies = simplexml_load_string($data);
// Der Namensraum http://www.w3.org/XML/1998/namespace ist als "xml" verfügbar.
echo $movies->movie->attributes("xml", true)["id"] . "\n";
// Auf Attribute mit Namensraum kann mit attributes() zugegriffen werden.
echo $movies->movie->attributes("a", true)["link"] . "\n";
// Durch die Verwendung der Namensraum-URI kann das Dokument jeden beliebigen
// Namensraum-Alias verwenden.
echo $movies->movie->attributes("http://a")["link"] . "\n";
// Auf Kinder kann mit children() zugegriffen werden.
echo $movies->movie->children("http://a")->actor . "\n";
// Um xpath() mit einem Namensraum zu benutzen, muss dieser zuerst registriert
// werden.
$movies->registerXPathNamespace("a", "http://a");
echo count($movies->xpath("//a:actor")) . "\n";
// Auch der Standard-Namensraum muss registriert werden.
$movies->registerXPathNamespace("default", "http://default");
echo count($movies->xpath("//default:movie")) . "\n";
// Dies ist leer.
echo count($movies->xpath("//movie")) . "\n";
?>
]]>
Behandlung von XML-Fehlern
Die Behandlung von XML-Fehlern beim Laden von Dokumenten ist eine sehr
einfache Sache. Durch die Verwendung der
libxml-Funktionalität ist es möglich,
alle XML-Fehlermeldungen beim Laden des Dokuments zu unterdrücken und
danach über die aufgetretenen Meldungen zu iterieren.
Das LibXMLError-Objekt, das von
libxml_get_errors zurückgegeben wird, hat verschiedene
Eigenschaften. Dazu gehören
message,
line und
column (Position) des
jeweiligen Fehlers.
Laden eines defekten XML-Strings");
if ($sxe === false) {
echo "Laden des XML fehlgeschlagen\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
?>
]]>
&example.outputs;
' expected
Opening and ending tag mismatch: xml line 1 and broken
Premature end of data in tag broken line 1
]]>
&reftitle.seealso;
libxml_use_internal_errorslibxml_get_errors