Maison > développement back-end > Tutoriel XML/RSS > Opération XML d'extension PHP (1) - SimpleXML

Opération XML d'extension PHP (1) - SimpleXML

黄舟
Libérer: 2018-05-17 09:38:18
original
5259 Les gens l'ont consulté


1. Introduction et installation

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

Exemples d'utilisation

Utilisation de base

Exemple n°1 Inclure le fichier example.php avec une chaîne XML

<?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;
?>
Copier après la connexion

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 &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie[0]->plot;?>
Copier après la connexion

La routine ci-dessus affichera :

   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.
Copier après la connexion

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 &#39;example.php&#39;;
$movies = new SimpleXMLElement($xmlstr);
echo $movies->movie->{&#39;great-lines&#39;}->line;?>
Copier après la connexion

La routine ci-dessus affichera :

PHP solves all my web problems
Copier après la connexion

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 &#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;}
?>
Copier après la connexion

La routine ci-dessus affichera :

Ms. Coder played by Onlivia Actora
Mr. Coder played by El ActÓr
Copier après la connexion
Copier après la connexion

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 &#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;}}
?>
Copier après la connexion

La routine ci-dessus affichera :

7 thumbs up5 stars
Copier après la connexion

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 &#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);?>
Copier après la connexion
La routine ci-dessus affichera :

My favorite movie.PHP: Behind the Parser
Copier après la connexion

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 &#39;example.php&#39;;
$movies1 = new SimpleXMLElement($xmlstr);$movies2 = new SimpleXMLElement($xmlstr);
var_dump($movies1 == $movies2); // false since PHP 5.2.0?>
Copier après la connexion
La routine ci-dessus affichera :

bool(false)
Copier après la connexion

Exemple n°8 utilisant XPath

SimpleXML inclut les éléments construits -in support . Pour trouver tous les éléments

 :

<?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;}?>
Copier après la connexion
'

//' 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
Copier après la connexion
Copier après la connexion

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 &#39;example.php&#39;;$movies = new SimpleXMLElement($xmlstr);
$movies->movie[0]->characters->character[0]->name = &#39;Miss Coder&#39;;
echo $movies->asXML();?>
Copier après la connexion
La routine ci-dessus affichera :



 
  PHP: Behind the Parser
  
   
    Miss Coder
    Onlivia Actora
   
   
    Mr. Coder
    El ActÓr
   
  
  
   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.
  
  
   PHP solves all my web problems
  
  7
  5
 
Copier après la connexion

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 &#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();?>
Copier après la connexion
La routine ci-dessus affichera :



 
  PHP: Behind the Parser
  
   
    Ms. Coder
    Onlivia Actora
   
   
    Mr. Coder
    El ActÓr
   
  Mr. ParserJohn Doe
  
   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.
  
  
   PHP solves all my web problems
  
  7
  5
 PG
Copier après la connexion

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(&#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;?>
Copier après la connexion

Gestion des erreurs XML
blah
Copier après la connexion

Exemple n°1 Chargement d'une chaîne XML cassée

Ce qui précède La routine produira :
<?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;
}
}
?>
Copier après la connexion

Failed loading XML
    Blank needed here
    parsing XML declaration: &#39;?>&#39; expected
    Opening and ending tag mismatch: xml line 1 and broken
    Premature end of data in tag broken line 1
Copier après la connexion


3. Fonctions associées

    simplexml_import_dom — Obtenez un objet SimpleXMLElement à partir d'un noeud DOM.
  • simplexml_load_file — Interprète un fichier XML en un objet
  • simplexml_load_string — Interprète une chaîne XML en un objet
  • 4. Classes et fonctions membres associées

Classe SimpleXMLElement

    SimpleXMLElement::addAttribute — Ajoute un attribut à l'élément SimpleXML
  • SimpleXMLElement::addChild — Ajoute un élément enfant au nœud XML
  • SimpleXMLElement::asXML — Renvoie une chaîne XML bien formée basée sur Élément SimpleXML
  • SimpleXMLElement::attributes — Identifie les attributs d'un élément
  • SimpleXMLElement::children — Trouve les enfants d'un nœud donné
  • SimpleXMLElement::__construct — Crée un nouvel objet SimpleXMLElement
  • SimpleXMLElement::count — Compte les enfants d'un élément
  • SimpleXMLElement ::getDocNamespaces — Renvoie les espaces de noms déclarés dans le document
  • SimpleXMLElement::getName — Obtient le nom de l'élément XML
  • SimpleXMLElement : :getNamespaces — Renvoie les espaces de noms utilisés dans le document
  • 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)!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal