To read a namespace node you have to use the children method.
<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
<p:person id="1">John Doe</p:person>
<p:person id="2">Susie Q. Public</p:person>
</people>
XML;
$sxe = new SimpleXMLElement($xml);
$ns = $sxe->getNamespaces(true);
$child = $sxe->children($ns['p']);
foreach ($child->person as $out_ns)
{
echo $out_ns;
}
?>
SimpleXMLElement::getNamespaces
(PHP 5 >= 5.1.2)
SimpleXMLElement::getNamespaces — Retourne les espaces de noms utilisés dans un document
Description
public array SimpleXMLElement::getNamespaces
([ bool
$recursive = false
] )Retourne les espaces de noms utilisés dans un document.
Liste de paramètres
-
recursive -
Si spécifié, retourne tous les espaces de noms utilisés dans les noeuds parents et enfants. Sinon, retourne uniquement les espaces de noms utilisés dans le noeud racine.
Valeurs de retour
La méthode getNamespaces retourne un tableau d'espaces de noms avec leurs URL associés.
Exemples
Exemple #1 Récupère les espaces de noms utilisés dans un document
<?php
$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
<p:person id="1">John Doe</p:person>
<p:person id="2">Susie Q. Public</p:person>
</people>
XML;
$sxe = new SimpleXMLElement($xml);
$namespaces = $sxe->getNamespaces(true);
var_dump($namespaces);
?>
L'exemple ci-dessus va afficher :
array(1) {
["p"]=>
string(21) "http://example.org/ns"
}
Voir aussi
- SimpleXMLElement::getDocNamespaces() - Retourne les espaces de noms déclarés dans un document
- SimpleXMLElement::registerXPathNamespace() - Crée un contexte préfixe/ns pour la prochaine requête XPath
harry at nospam dot thestorm dot plus dot com ¶
1 year ago
harry at nospam dot thestorm dot plus dot com ¶
1 year ago
If the namespace is nested in the xml, then you will have to loop over the nodes.
<?php
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<people xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
<items>
<title>This is a test of namespaces and my patience</title>
<p:person id="1">John Doe</p:person>
<p:person id="2">Susie Q. Public</p:person>
<p:person id="1">Fish Man</p:person>
</items>
</people>
XML;
$sxe = new SimpleXMLElement($xml);
foreach ($sxe as $out_ns)
{
$ns = $out_ns->getNamespaces(true);
$child = $out_ns->children($ns['p']);
foreach ($child as $out)
{
echo $out . "<br />";
}
}
?>
