Espaces de noms dans SimpleXML : gestion des balises et des attributs avec des deux-points
Dans les documents XML, les balises et les attributs avec des deux-points dans leurs noms signifient l'appartenance à un espace de noms, qui permet de distinguer les éléments de différents formats ou normes. SimpleXML propose deux approches pour gérer les espaces de noms :
1. Utilisation des méthodes enfants et attributs
->children() : cette méthode filtre et accède aux éléments enfants dans un espace de noms spécifique. Vous pouvez basculer entre les espaces de noms en appelant cette méthode à plusieurs reprises.
->attributes() : similaire à ->children(), mais récupère les attributs dans un espace de noms particulier.
Par exemple :
<document xmlns="http://example.com" xmlns:ns2="https://namespaces.example.org/two" xmlns:seq="urn:example:sequences"> <list type="short"> <ns2:item seq:position="1">A thing</ns2:item> <ns2:item seq:position="2">Another thing</ns2:item> </list> </document>
Extrait XML avec espaces de noms
Code XML simple pour accéder aux éléments et attributs :
define('XMLNS_EG1', 'http://example.com'); define('XMLNS_EG2', 'https://namespaces.example.org/two'); define('XMLNS_SEQ', 'urn:example:sequences'); $sx = simplexml_load_string($xml); 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"; }
2. Utilisation des paramètres d'espace de noms
Vous pouvez spécifier l'espace de noms lors de l'analyse des données XML à l'aide du paramètre $namespace_or_prefix de simplexml_load_string, simplexml_load_file ou du nouveau SimpleXMLElement. Ce paramètre peut être soit l'URI de l'espace de noms, soit le préfixe local.
Par exemple, si l'élément racine utilise un espace de noms par défaut :
<document xmlns="http://example.com"> <list type="short"> <item>A thing</item> <item>Another thing</item> </list> </document>
Extrait XML avec espace de noms par défaut
Code XML simple :
$sx = simplexml_load_string($xml, null, 0, XMLNS_EG1); foreach ($sx->list->item as $item) { echo 'Position: Not Available' . "\n"; echo 'Item: ' . (string)$item . "\n"; }
Notation abrégée (non Recommandé)
Comme raccourci, vous pouvez utiliser le préfixe local de l'espace de noms comme deuxième paramètre des méthodes ->children() et ->attributes(). Cependant, cette approche n'est pas recommandée car le préfixe peut varier.
Conclusion
SimpleXML fournit des méthodes puissantes pour gérer les espaces de noms et vous permet de travailler de manière transparente avec des documents XML, peu importe de leur utilisation de l'espace de noms. Comprendre les espaces de noms est crucial pour analyser et accéder efficacement aux données dans des documents XML complexes.
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!