Lorsque vous travaillez avec des documents XML, l'espace de noms est un mécanisme commun pour distinguer les noms des éléments et des attributs pour éviter de nommer les conflits. Dans PHP, les documents XML peuvent être analysés via des extensions DOM et les informations d'espace de noms peuvent être obtenues à l'aide de la méthode GetDocNamespaces () .
La méthode GetDocNamespaces () appartient à la classe DomDocument . Il renvoie un tableau associatif, la clé du tableau est le préfixe de l'espace de noms, et la valeur est l'espace de noms correspondant URI. Cette méthode est très utile, en particulier lors de la gestion des documents XML avec plusieurs espaces de noms, ce qui peut nous aider à obtenir le préfixe d'espace de noms pertinent.
Tout d'abord, créez un document XML contenant l'espace de noms. Supposons que nous ayons un document XML simple comme suit:
<span><span><span class="hljs-meta"><?xml version=<span class="hljs-string">"1.0"</span></span></span><span> encoding=</span><span><span class="hljs-string">"UTF-8"</span></span><span>?>
</span><span><span class="hljs-tag"><<span class="hljs-name">root</span></span></span><span> </span><span><span class="hljs-attr">xmlns:ns1</span></span><span>=</span><span><span class="hljs-string">"http://www.example.com/ns1"</span></span><span> </span><span><span class="hljs-attr">xmlns:ns2</span></span><span>=</span><span><span class="hljs-string">"http://www.example.com/ns2"</span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">ns1:item</span></span></span><span>>Item 1</span><span><span class="hljs-tag"></<span class="hljs-name">ns1:item</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">ns2:item</span></span></span><span>>Item 2</span><span><span class="hljs-tag"></<span class="hljs-name">ns2:item</span></span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">root</span></span></span><span>>
</span></span>
Dans ce XML, l'élément racine utilise deux espaces de noms NS1 et NS2 , respectivement, liés à différents URI.
Ensuite, nous chargeons ce document XML via PHP et utilisons la méthode GetDocNamespaces () pour obtenir le préfixe de l'espace de noms.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$xmlString</span></span><span> = <span class="hljs-string">'<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:ns1="http://www.example.com/ns1" xmlns:ns2="http://www.example.com/ns2">
<ns1:item>Item 1</ns1:item>
<ns2:item>Item 2</ns2:item>
</root>'</span>;
</span><span><span class="hljs-variable">$dom</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DOMDocument</span></span><span>();
</span><span><span class="hljs-variable">$dom</span></span><span>-></span><span><span class="hljs-title function_ invoke__">loadXML</span></span><span>(</span><span><span class="hljs-variable">$xmlString</span></span><span>);
</span><span><span class="hljs-comment">// Obtenez le préfixe de l'espace de noms pour le document</span></span><span>
</span><span><span class="hljs-variable">$namespaces</span></span><span> = </span><span><span class="hljs-variable">$dom</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getDocNamespaces</span></span><span>();
</span><span><span class="hljs-comment">// Préfixe de l'espace de noms de sortie</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$namespaces</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$prefix</span></span><span> => </span><span><span class="hljs-variable">$namespace</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Prefix: <span class="hljs-subst">$prefix</span></span></span><span>, Namespace URI: </span><span><span class="hljs-subst">$namespace</span></span><span>\n";
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Nous chargeons d'abord la chaîne XML via la méthode LoadXML () .
Appelez ensuite la méthode GetDocNamespaces () , qui renvoie un tableau associatif contenant le préfixe d'espace de noms et l'URI correspondant.
Enfin, nous traversons ce tableau et sortions le préfixe de l'espace de noms et l'URI correspondant.
Après avoir exécuté le code PHP ci-dessus, vous obtiendrez une sortie similaire à ce qui suit:
<span><span><span class="hljs-attr">Prefix:</span></span><span> </span><span><span class="hljs-string">ns1,</span></span><span> </span><span><span class="hljs-attr">Namespace URI:</span></span><span> </span><span><span class="hljs-string">http://www.example.com/ns1</span></span><span>
</span><span><span class="hljs-attr">Prefix:</span></span><span> </span><span><span class="hljs-string">ns2,</span></span><span> </span><span><span class="hljs-attr">Namespace URI:</span></span><span> </span><span><span class="hljs-string">http://www.example.com/ns2</span></span><span>
</span></span>
Cela montre que le document XML contient deux espaces de noms NS1 et NS2 , qui correspondent respectivement à différents URI.
La méthode GetDocNamespaces () est un outil très pratique qui peut nous aider à extraire les préfixes et les uris de tous les espaces de noms à partir de documents XML. Ceci est utile lorsque l'analyse des documents XML complexes, en particulier lorsque plusieurs espaces de noms doivent être traités, les éléments peuvent être identifiés et manipulés avec précision via des préfixes d'espace de noms.
En utilisant correctement l'espace de noms et la méthode GetDocNamespaces () , nous sommes en mesure de analyser et de traiter les données XML plus efficacement, d'éviter de nommer les conflits et de nous assurer que le document est structuré clairement et sans ambiguïté.