&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-String PHP: Behind the Parser Ms. Coder Onlivia Actora Mr. Coder El 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 problems 7 5 XML; ?> ]]> Die Einfachheit von SimpleXML ist besonders deutlich erkennbar, wenn man einen String oder eine Zahl aus einem XML-Dokument extrahieren will. <literal><plot></literal> 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 <literal><line></literal> 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 Parser Miss Coder Onlivia Actora Mr. Coder El 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 problems 7 5 ]]> 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 Parser Ms. Coder Onlivia Actora Mr. Coder El ActÓr Mr. 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 problems 7 5 PG ]]> 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äumen Onlivia 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_errors libxml_get_errors