Die SimpleXML-Erweiterung bietet ein sehr einfaches und benutzerfreundliches Toolset, das XML in eine XML-Datei mit allgemeinen Attributselektoren konvertieren kann Ein Objekt für Array-Iteratoren.
Diese Erweiterung erfordert die PHP-Erweiterung libxml. Das bedeutet, dass --enable-libxml verwendet werden muss, obwohl dies implizit erfolgt, da libxml standardmäßig aktiviert ist.
Erfordert PHP5 und höher.
Diese Erweiterung ist standardmäßig aktiviert und kann beim Kompilieren über die folgenden Optionen deaktiviert werden: --disable-simplexml
Beispiel #1 Datei example.php mit XML-String einbinden
<?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 wird am deutlichsten, wenn man eine Zeichenfolge oder Zahl aus a extrahiert grundlegendes XML-Dokument .
Beispiel #2
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie[0]->plot;?>
Die obige Routine gibt Folgendes aus:
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.
Der Zugriff auf Elemente in einem XML-Dokument, die Zeichen enthalten, die gemäß der PHP-Namenskonvention nicht zulässig sind (z. B. der Bindestrich), kann erreicht werden, indem der Elementname in geschweifte Klammern und den Apostroph eingeschlossen wird.
Beispiel Nr. 3 Abrufen von
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie->{'great-lines'}->line;?>
Die obige Routine gibt Folgendes aus:
PHP solves all my web problems
Beispiel #4 Zugriff auf nicht eindeutige Elemente in SimpleXML
Wenn mehrere Instanzen eines Elements als untergeordnete Elemente eines einzelnen übergeordneten Elements vorhanden sind, gelten normale Iterationstechniken.
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); /* For each <character> node, we echo a separate <name>. */foreach ($movies->movie->characters->character as $character) { echo $character->name, ' played by ', $character->actor, PHP_EOL;} ?>
Die obige Routine gibt Folgendes aus:
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 zugängliche Objekte.
Beispiel #5 Attribute verwenden
Bisher haben wir nur die Arbeit des Lesens von Elementnamen und ihren Werten behandelt. SimpleXML kann auch auf Elementattribute eines Elements zugreifen, genau wie Sie es auf Elemente eines Elements tun würden array.
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); /* Access the <rating> nodes of the first movie.* Output the rating scale, too. */ foreach ($movies->movie[0]->rating as $rating) { switch((string) $rating['type']) { // Get attributes as element indicescase 'thumbs':echo $rating, ' thumbs up'; break;case 'stars':echo $rating, ' stars';break;}} ?>
Die obige Routine gibt Folgendes aus:
7 thumbs up5 stars
Beispiel #6 Vergleich von Elementen und Attributen mit Text
Zum Vergleichen eines Um ein Element oder Attribut mit einem String zu verbinden oder es an eine Funktion zu übergeben, die einen String erfordert, müssen Sie es mit (string) in einen String umwandeln. Andernfalls behandelt PHP das Element als Objekt.
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); if ((string) $movies->movie->title == 'PHP: Behind the Parser') {print 'My favorite movie.';} echo htmlentities((string) $movies->movie->title);?>
Die obige Routine gibt Folgendes aus:
My favorite movie.PHP: Behind the Parser
Beispiel Nr. 7 Vergleich zweier Elemente
Zwei SimpleXMLElements werden als unterschiedlich betrachtet, auch wenn sie auf dasselbe Element verweisen seit PHP 5.2 .0.
<?phpinclude 'example.php'; $movies1 = new SimpleXMLElement($xmlstr);$movies2 = new SimpleXMLElement($xmlstr); var_dump($movies1 == $movies2); // false since PHP 5.2.0?>
Die obige Routine gibt Folgendes aus:
bool(false)
Beispiel Nr. 8 mit XPath
SimpleXML enthält gebaut -in-Unterstützung. Um alle
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); foreach ($movies->xpath('//character') as $character) { echo $character->name, 'played by ', $character->actor, PHP_EOL;}?>
'//' dient als Platzhalter, um einen absoluten Pfad anzugeben der Schrägstriche .
Die obige Routine gibt Folgendes aus:
Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr
Beispiel #9 Werte festlegen
Daten in SimpleXML müssen nicht konstant sein. Das Objekt ermöglicht die Manipulation aller seiner Elemente.
<?phpinclude 'example.php';$movies = new SimpleXMLElement($xmlstr); $movies->movie[0]->characters->character[0]->name = 'Miss Coder'; echo $movies->asXML();?>
Die obige Routine gibt Folgendes aus:
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
Beispiel #10 Elemente und Attribute hinzufügen
Seit PHP 5.1.3 bietet SimpleXML die Möglichkeit, problemlos untergeordnete Elemente und Attribute hinzuzufügen.
<?phpinclude '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();?>
Die obige Routine gibt Folgendes aus:
PHP: Behind the Parser Ms. Coder Onlivia Actora Mr. Coder El ActÓr Mr. Parser John 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
Beispiel #11 DOM-Interoperabilität
PHP verfügt über einen Mechanismus zum Konvertieren von XML-Knoten zwischen SimpleXML- und DOM-Formaten. Dieses Beispiel zeigt, wie man ein DOM-Element in SimpleXML ändern kann.
<?php$dom = new DOMDocument;$dom->loadXML('<books><book> <title>blah</title></book></books>');if (!$dom) {echo 'Error while parsing the document';exit;} $books = simplexml_import_dom($dom); echo $books->book[0]->title;?>
Oben Die Routine gibt Folgendes aus:
blah
Beispiel Nr. 1: Laden einer fehlerhaften XML-Zeichenfolge
<?php libxml_use_internal_errors(true); $sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>"); if ($sxe === false) { echo "Failed loading XML\n"; foreach(libxml_get_errors() as $error) { echo "\t", $error->message; } } ?>
Das Obige Die Routine gibt Folgendes aus:
Failed loading XML Blank needed here parsing XML declaration: '?>' expected Opening and ending tag mismatch: xml line 1 and broken Premature end of data in tag broken line 1
simplexml_import_dom – Holen Sie sich ein SimpleXMLElement-Objekt von einem DOM-Knoten.
simplexml_load_file – Interpretiert eine XML-Datei in ein Objekt
simplexml_load_string – Interpretiert eine XML-Zeichenfolge in ein Objekt
SimpleXMLElement-Klasse
SimpleXMLElement::addAttribute – Fügt dem SimpleXML-Element ein Attribut hinzu
SimpleXMLElement::addChild – Fügt dem XML-Knoten ein untergeordnetes Element hinzu
SimpleXMLElement::asXML – Gibt eine wohlgeformte XML-Zeichenfolge basierend auf zurück SimpleXML-Element
SimpleXMLElement::attributes – Identifiziert die Attribute eines Elements
SimpleXMLElement::children – Findet untergeordnete Elemente eines bestimmten Knotens
SimpleXMLElement::__construct – Erstellt ein neues SimpleXMLElement-Objekt
SimpleXMLElement::count – Zählt die untergeordneten Elemente eines Elements
SimpleXMLElement ::getDocNamespaces – Gibt im Dokument deklarierte Namespaces zurück
SimpleXMLElement::getName – Ruft den Namen des XML-Elements ab
SimpleXMLElement: :getNamespaces – Gibt im Dokument verwendete Namespaces zurück
SimpleXMLElement::registerXPathNamespace – Erstellt einen Präfix/NS-Kontext für die nächste XPath-Abfrage
SimpleXMLElement::saveXML – 别名 SimpleXMLElement::asXML
SimpleXMLElement::__toString – Gibt den String-Inhalt zurück
SimpleXMLElement::xpath – Führt eine XPath-Abfrage für XML-Daten aus
SimpleXMLIterator类
SimpleXMLIterator::current – Gibt das aktuelle Element zurück
SimpleXMLIterator::getChildren – Gibt zurück die Unterelemente des aktuellen Elements
SimpleXMLIterator::hasChildren – Prüft, ob das aktuelle Element Unterelemente hat.
SimpleXMLIterator::key – Aktuellen Schlüssel zurückgeben
SimpleXMLIterator::next – Zum nächsten Element wechseln
SimpleXMLIterator::rewind – Zum ersten Element zurückspulen
SimpleXMLIterator::valid – Überprüfen Sie, ob das aktuelle Element gültig ist
以上就是PHP扩展之XML操作(一)——SimpleXML的内容,更多相关内容请关注PHP中文网(www.php.cn)!