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 — Retorna los namespaces usados en el documento
Descripción
public array SimpleXMLElement::getNamespaces
([ bool
$recursive = false
] )Retorna los namespaces usados en el documento
Parámetros
-
recursive -
Si se especifica, retorna todos los namespaces usados en los nodos padre e hijos. De lo contrario, retorna sólo los namespaces usados en el nodo raíz.
Valores devueltos
El método getNamespaces retorna un array de nombres de namespaces con sus URIs asociadas.
Ejemplos
Ejemplo #1 Obtener el namespace del documento en uso
<?php
$xml = <<<XML
<?xml version="1.0" standalone="yes"?>
<gente xmlns:p="http://example.org/ns" xmlns:t="http://example.org/test">
<p:persona id="1">John Doe</p:persona>
<p:persona id="2">Susie Q. Public</p:persona>
</gente>
XML;
$sxe = new SimpleXMLElement($xml);
$namespaces = $sxe->getNamespaces(true);
var_dump($namespaces);
?>
El resultado del ejemplo sería:
array(1) {
["p"]=>
string(21) "http://example.org/ns"
}
Ver también
- SimpleXMLElement::getDocNamespaces() - Retorna los namespaces declarados en el documento
- SimpleXMLElement::registerXPathNamespace() - Crea un contexto prefijo/ns para la siguiente petición 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 />";
}
}
?>
