L'extension SimpleXML fournit un ensemble d'outils très simple et facile à utiliser qui peut convertir du XML en un fichier XML avec des sélecteurs d'attributs généraux et Un objet pour les itérateurs de tableau.
Cette extension nécessite l'extension PHP libxml. Cela signifie que --enable-libxml doit être utilisé, bien que cela soit fait implicitement puisque libxml est activé par défaut.
Nécessite PHP5 et supérieur.
Cette extension est activée par défaut et peut être désactivée via les options suivantes lors de la compilation : --disable-simplexml
Exemple n°1 Inclure le fichier example.php avec une chaîne XML
<?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; ?>
La simplicité de SimpleXML apparaît plus clairement lorsque l'on extrait une chaîne ou un nombre d'un document XML de base.
Exemple n°2 Obtenir
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie[0]->plot;?>
La routine ci-dessus affichera :
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.
L'accès aux éléments d'un document XML qui contiennent des caractères non autorisés par la convention de dénomination PHP (par exemple le trait d'union) peut être réalisé en encapsulant le nom de l'élément entre accolades et l'apostrophe.
Exemple n° 3 Obtenir
<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); echo $movies->movie->{'great-lines'}->line;?>
La routine ci-dessus affichera :
PHP solves all my web problems
Exemple n° 4 : Accès à des éléments non uniques dans SimpleXML
Lorsque plusieurs instances d'un élément existent en tant qu'enfants d'un seul élément parent, les techniques d'itération normales s'appliquent.
<?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;} ?>
La routine ci-dessus affichera :
Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr
Remarque :
Les propriétés ($movies->movie dans l'exemple précédent) ne sont pas des tableaux. Ce sont des objets itérables et accessibles.
Exemple n°5 Utilisation des attributs
Jusqu'à présent, nous n'avons couvert que le travail de lecture des noms d'éléments et de leurs valeurs. SimpleXML peut également accéder aux attributs d'un élément comme vous le feriez pour les éléments d'un élément. tableau.
<?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;}} ?>
La routine ci-dessus affichera :
7 thumbs up5 stars
Exemple n°6 Comparaison d'éléments et d'attributs avec du texte
Pour comparer un élément ou attribut avec une chaîne ou le transmettre à une fonction qui nécessite une chaîne, vous devez le convertir en chaîne en utilisant (string) Sinon, PHP traite l'élément comme un objet.
<🎜. ><?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);?>
My favorite movie.PHP: Behind the Parser
Exemple n°7 Comparaison de deux éléments
Deux SimpleXMLElements sont considérés comme différents même s'ils pointent vers le même élément depuis 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?>
bool(false)
Exemple n°8 utilisant XPath
SimpleXML inclut les éléments construits -in support . Pour trouver tous les éléments<?phpinclude 'example.php'; $movies = new SimpleXMLElement($xmlstr); foreach ($movies->xpath('//character') as $character) { echo $character->name, 'played by ', $character->actor, PHP_EOL;}?>
//' sert de caractère générique. Pour spécifier des chemins absolus, omettez-en un. des barres obliques.
La routine ci-dessus affichera :Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr
Exemple n°9 Définition des valeurs
Les données dans SimpleXML ne doivent pas nécessairement être constant. L'objet permet la manipulation de tous ses éléments.<?phpinclude 'example.php';$movies = new SimpleXMLElement($xmlstr); $movies->movie[0]->characters->character[0]->name = 'Miss Coder'; echo $movies->asXML();?>
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
Exemple n°10 Ajout d'éléments et d'attributs
Depuis PHP 5.1.3, SimpleXML a la capacité d'ajouter facilement des enfants et des attributs.<?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();?>
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
Exemple n°11 d'interopérabilité DOM
PHP dispose d'un mécanisme pour convertir les nœuds XML entre les formats SimpleXML et DOM. Cet exemple montre comment changer un élément DOM en SimpleXML.<. 🎜>Ci-dessus La routine affichera :<?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;?>
blah
Ce qui précède La routine produira :
<?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; } } ?>
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. Fonctions associées
SimpleXMLElement::registerXPathNamespace — Crée un contexte de préfixe/ns pour la prochaine requête XPath
SimpleXMLElement::saveXML — 别名 SimpleXMLElement::asXML
SimpleXMLElement::__toString — Renvoie le contenu de la chaîne
SimpleXMLElement::xpath — Exécute une requête XPath sur des données XML
SimpleXMLIterator类
SimpleXMLIterator::current — Renvoie l'élément actuel
SimpleXMLIterator::getChildren — Renvoie les sous-éléments de l'élément actuel
SimpleXMLIterator::hasChildren — Vérifie si l'élément actuel a des sous-éléments.
SimpleXMLIterator::key — Renvoyer la clé actuelle
SimpleXMLIterator::next — Passer à l'élément suivant
SimpleXMLIterator::rewind — Revenir au premier élément
SimpleXMLIterator::valid — Vérifiez si l'élément actuel est valide
以上就是PHP扩展之XML操作(一)——SimpleXML的内容,更多相关内容请关注PHP中文网(www.php.cn)!