Maison >développement back-end >tutoriel php >Comment accéder correctement aux espaces de noms XML à l'aide de SimpleXML ?

Comment accéder correctement aux espaces de noms XML à l'aide de SimpleXML ?

DDD
DDDoriginal
2024-12-28 21:56:19619parcourir

How Do I Access XML Namespaces Correctly Using SimpleXML?

Accès aux espaces de noms XML dans SimpleXML

Les espaces de noms XML sont une méthode de fusion de plusieurs formats XML dans un seul document tout en préservant leurs origines respectives. Un espace de noms XML est défini par une paire délimitée par deux points comprenant un préfixe indiquant l'espace de noms local et un identificateur de ressource uniforme (URI) identifiant l'espace de noms.

Pourquoi le code de la question ne fonctionne-t-il pas ?

La tentative initiale d'accès à un élément avec espace de noms dans l'exemple, c'est-à-dire ->ns2:item, échoue car SimpleXML s'attend à ce que les espaces de noms soient définis à l'aide des méthodes children() et attributs().

Accès aux espaces de noms dans SimpleXML

SimpleXML propose deux approches pour gérer les espaces de noms :

  • Méthode children() : Sélectionne les éléments dans un espace de noms particulier. Il change effectivement le focus de l'objet sur cet espace de noms jusqu'à ce qu'il revienne via un autre appel children().
  • Méthode attributs() : Similaire à children(), mais utilisée pour accéder aux attributs dans un espace spécifié espace de noms.

Code avec gestion de l'espace de noms

Voici une version corrigée du code :

define('XMLNS_EG1', 'http://example.com');
define('XMLNS_EG2', 'https://namespaces.example.org/two');
define('XMLNS_SEQ', 'urn:example:sequences');

foreach ($sx->children(XMLNS_EG1)->list->children(XMLNS_EG2)->item as $item) {
    echo 'Position: ' . $item->attributes(XMLNS_SEQ)->position . "\n";
    echo 'Item: ' . (string)$item . "\n";
}

Vous pouvez également spécifier l'espace de noms initial lors du chargement du document à l'aide du paramètre $namespace_or_prefix de fonctions telles que simplexml_load_string.

Remarque : Il est recommandé d'utiliser l'URI complet de l'espace de noms au lieu des préfixes, car les préfixes peuvent changer, ce qui pourrait interrompre votre code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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