Position actuelle: Accueil> Derniers articles> Comment la fonction XML_PARSE_INTO_STRUCT distingue-t-elle et extrait-elle les balises XML de leurs informations d'attribut?

Comment la fonction XML_PARSE_INTO_STRUCT distingue-t-elle et extrait-elle les balises XML de leurs informations d'attribut?

M66 2025-06-12

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.

Prototype de fonction

 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.

Comment extraire l'étiquette et attribuer des informations?

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

Exemple: analyse des attributs de contenu XML

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

Instructions d'analyse

  • 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 () .

Extraire les informations d'attribut

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";
        }
    }
}

Choses à noter

  • 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é.

résumé