Heim >Backend-Entwicklung >XML/RSS-Tutorial >PHP-Erweiterungs-XML-Operation (1) – SimpleXML

PHP-Erweiterungs-XML-Operation (1) – SimpleXML

黄舟
黄舟Original
2018-05-17 09:38:185246Durchsuche


1. Einführung und Installation

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

2. Anwendungsbeispiele

Grundlegende Verwendung

Beispiel #1 Datei example.php mit XML-String einbinden

<?php
$xmlstr = <<<XML
<?xml version=&#39;1.0&#39; standalone=&#39;yes&#39;?>
<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&#211;r</actor>
</character>
</characters>
<plot>
So, this language. It&#39;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 a82a54010e8e844b28dec6f52c796df1 abrufen

<?phpinclude &#39;example.php&#39;;
$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 15a73cc5312745b1b00671f6e690e36a

<?phpinclude &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie->{&#39;great-lines&#39;}->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 &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
/* For each <character> node, we echo a separate <name>. */foreach ($movies->movie->characters->character as $character) {
echo $character->name, &#39; played by &#39;, $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 &#39;example.php&#39;;
$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[&#39;type&#39;]) { // Get attributes as element indicescase &#39;thumbs&#39;:echo $rating, &#39; thumbs up&#39;;
break;case &#39;stars&#39;:echo $rating, &#39; stars&#39;;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 &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
if ((string) $movies->movie->title == &#39;PHP: Behind the Parser&#39;) {print &#39;My favorite movie.&#39;;}
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 &#39;example.php&#39;;
$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 db0c08544b71179f3fd0e855bd613a1b-Elemente zu finden:

<?phpinclude &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
foreach ($movies->xpath(&#39;//character&#39;) as $character) {
echo $character->name, &#39;played by &#39;, $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 &#39;example.php&#39;;$movies = new SimpleXMLElement($xmlstr);
$movies->movie[0]->characters->character[0]->name = &#39;Miss Coder&#39;;
echo $movies->asXML();?>

Die obige Routine gibt Folgendes aus:

3e5184b51d19bd3b3173071244ff71fe
eab6e99f51fee68293d1126fa516c747
 8adf8e6c41d19c74d254355bd9d9c69e
  b2386ffb911b14667cb8f0f91ea547a7PHP: Behind the Parser6e916e0f7d1e588d4f442bf645aedb2f
  c3ae6056e653b437c6b27357b7e7671a
   db0c08544b71179f3fd0e855bd613a1b
    8a11bc632ea32a57b3e3693c7987c420Miss Coderdf406f776eecbaf16b62325323196f14
    194eaccae6455d5c407b1ac2afe04cd0Onlivia Actorac0d1bcc4fa4e9e034ebc23e1ef89e5c2
   66707054a46c2dec1bf24d9318ba1124
   db0c08544b71179f3fd0e855bd613a1b
    8a11bc632ea32a57b3e3693c7987c420Mr. Coderdf406f776eecbaf16b62325323196f14
    194eaccae6455d5c407b1ac2afe04cd0El Act&#xD3;rc0d1bcc4fa4e9e034ebc23e1ef89e5c2
   66707054a46c2dec1bf24d9318ba1124
  aabc3226380a602ad187eb87d5efa83f
  a82a54010e8e844b28dec6f52c796df1
   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.
  fa8825681e04013deb51ef36ab6dbac6
  54a9d3919a9de3703b391ab1e4eaee87
   15a73cc5312745b1b00671f6e690e36aPHP solves all my web problems6e6d7ec7f2f63fbe473136c2c34a55b7
  c0dd7eda886ba0d09f5a00454545474c
  e27af9d8c16e5d4022ce762c86f195be79df14055a92f49c29299ca2d367bde62
  b724a65f9508b61211142b27c8620c4659df14055a92f49c29299ca2d367bde62
 96664a6d22a82ab9c28a528afca408bc
c3a75a871bc1ee80ecb54700c0759808

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 &#39;example.php&#39;;$movies = new SimpleXMLElement($xmlstr);
$character = $movies->movie[0]->characters->addChild(&#39;character&#39;);$character->addChild(&#39;name&#39;, &#39;Mr. Parser&#39;);
$character->addChild(&#39;actor&#39;, &#39;John Doe&#39;);
$rating = $movies->movie[0]->addChild(&#39;rating&#39;, &#39;PG&#39;);$rating->addAttribute(&#39;type&#39;, &#39;mpaa&#39;);
echo $movies->asXML();?>

Die obige Routine gibt Folgendes aus:

3e5184b51d19bd3b3173071244ff71fe
eab6e99f51fee68293d1126fa516c747
 8adf8e6c41d19c74d254355bd9d9c69e
  b2386ffb911b14667cb8f0f91ea547a7PHP: Behind the Parser6e916e0f7d1e588d4f442bf645aedb2f
  c3ae6056e653b437c6b27357b7e7671a
   db0c08544b71179f3fd0e855bd613a1b
    8a11bc632ea32a57b3e3693c7987c420Ms. Coderdf406f776eecbaf16b62325323196f14
    194eaccae6455d5c407b1ac2afe04cd0Onlivia Actorac0d1bcc4fa4e9e034ebc23e1ef89e5c2
   66707054a46c2dec1bf24d9318ba1124
   db0c08544b71179f3fd0e855bd613a1b
    8a11bc632ea32a57b3e3693c7987c420Mr. Coderdf406f776eecbaf16b62325323196f14
    194eaccae6455d5c407b1ac2afe04cd0El Act&#xD3;rc0d1bcc4fa4e9e034ebc23e1ef89e5c2
   66707054a46c2dec1bf24d9318ba1124
  db0c08544b71179f3fd0e855bd613a1b8a11bc632ea32a57b3e3693c7987c420Mr. Parserdf406f776eecbaf16b62325323196f14194eaccae6455d5c407b1ac2afe04cd0John Doec0d1bcc4fa4e9e034ebc23e1ef89e5c266707054a46c2dec1bf24d9318ba1124aabc3226380a602ad187eb87d5efa83f
  a82a54010e8e844b28dec6f52c796df1
   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.
  fa8825681e04013deb51ef36ab6dbac6
  54a9d3919a9de3703b391ab1e4eaee87
   15a73cc5312745b1b00671f6e690e36aPHP solves all my web problems6e6d7ec7f2f63fbe473136c2c34a55b7
  c0dd7eda886ba0d09f5a00454545474c
  e27af9d8c16e5d4022ce762c86f195be79df14055a92f49c29299ca2d367bde62
  b724a65f9508b61211142b27c8620c4659df14055a92f49c29299ca2d367bde62
 8f35ab349d6453d281f32443bf3504f4PG9df14055a92f49c29299ca2d367bde6296664a6d22a82ab9c28a528afca408bc
c3a75a871bc1ee80ecb54700c0759808

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(&#39;<books><book>
<title>blah</title></book></books>&#39;);if (!$dom) {echo &#39;Error while parsing the document&#39;;exit;}
$books = simplexml_import_dom($dom);
echo $books->book[0]->title;?>

Oben Die Routine gibt Folgendes aus:

blah

Umgang mit XML-Fehlern

Beispiel Nr. 1: Laden einer fehlerhaften XML-Zeichenfolge

<?php
libxml_use_internal_errors(true);
$sxe = simplexml_load_string("<?xml version=&#39;1.0&#39;><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


3. Verwandte Funktionen

  • 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

4. Verwandte Klassen und Mitgliedsfunktionen

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)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn