Dans PHP, l'une des façons courantes de gérer XML est d'utiliser la fonction XML_PARSE_INTO_STRUCT () . Cette fonction peut analyser les documents XML en un tableau structuré, qui inclut non seulement la relation hiérarchique de la balise, mais extrait également les attributs de balise, les valeurs et les types. Cet article expliquera comment distinguer et extraire les balises XML de leurs informations d'attribut via cette fonction et l'illustrer avec des exemples.
int xml_parse_into_struct(
XMLParser $parser,
string $data,
array &$values,
array &$index = null
);
$ Parser : Ressource Parser XML.
$ DATA : données XML à analyser.
$ Valeurs : le tableau structuré de sortie.
$ index : tableau facultatif pour les étiquettes d'indexation.
La clé de xml_parse_into_struct () est qu'elle écrit toutes les balises, nœuds de texte, CDATA et autres informations dans le tableau de valeurs $ dans l'ordre. Chaque élément du tableau est un tableau associatif, et les champs principaux comprennent:
Tag : nom de balise.
Type : type de nœud (comme ouvert , ferme , complet , CDATA , etc.).
Valeur : la valeur du texte (le cas échéant) contenu par la balise.
Attributs : l'attribut de la balise existe en tant que tableau associatif (s'il y a un attribut).
Supposons que nous ayons le XML suivant:
<books>
<book id="1" category="fiction">
<title>Book One</title>
</book>
<book id="2" category="non-fiction">
<title>Book Two</title>
</book>
</books>
Nous pouvons utiliser le code PHP suivant pour l'analyse:
<?php
$xml = <<<XML
<books>
<book id="1" category="fiction">
<title>Book One</title>
</book>
<book id="2" category="non-fiction">
<title>Book Two</title>
</book>
</books>
XML;
$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $values, $index);
xml_parser_free($parser);
echo "<pre>";
print_r($values);
echo "
";
?>
Le contenu des valeurs de $ après l'analyse est à peu près le suivant:
Array
(
[0] => Array
(
[tag] => BOOKS
[type] => open
)
[1] => Array
(
[tag] => BOOK
[type] => open
[attributes] => Array
(
[ID] => 1
[CATEGORY] => fiction
)
)
[2] => Array
(
[tag] => TITLE
[type] => complete
[value] => Book One
)
[3] => Array
(
[tag] => BOOK
[type] => close
)
[4] => Array
(
[tag] => BOOK
[type] => open
[attributes] => Array
(
[ID] => 2
[CATEGORY] => non-fiction
)
)
[5] => Array
(
[tag] => TITLE
[type] => complete
[value] => Book Two
)
[6] => Array
(
[tag] => BOOK
[type] => close
)
[7] => Array
(
[tag] => BOOKS
[type] => close
)
)
Chaque balise de livre a des éléments de types ouverts et fermés .
Les informations d'attribut sont contenues dans la clé d'attributs et existe sous la forme d'un tableau associatif.
Les valeurs de texte (telles que le titre du livre) existent dans la clé de valeur et le type de balise est terminé .
Les noms de balises sont toujours capitalisés, ce qui est le comportement par défaut de xml_parse_into_struct () .
Vous pouvez extraire toutes les balises avec des attributs en itérant sur le tableau de valeurs $ . Par exemple:
foreach ($values as $entry) {
if (isset($entry['attributes'])) {
echo "Tag: {$entry['tag']}\n";
foreach ($entry['attributes'] as $attrName => $attrValue) {
echo " $attrName => $attrValue\n";
}
}
}
Les noms de balises et les noms d'attributs sont automatiquement convertis en majuscules.
Cette fonction ne conserve pas les informations de structure hiérarchique des balises, mais n'est organisée que par ordre d'occurrence.
Convient pour le XML simple, si un traitement structurel plus complexe est requis, DOM ou simplexml est recommandé.