PHP Conference China 2020

SimpleXMLElement::getNamespaces

(PHP 5 >= 5.1.2, PHP 7)

SimpleXMLElement::getNamespaces Devuelve los espacios de nombre usados en el documento

Descripción

public SimpleXMLElement::getNamespaces ([ bool $recursive = FALSE ] ) : array

Devuelve los espacios de nombre usados en el documento

Parámetros

recursive

Si se especifica, devuelve todos los espacios de nombre usados en los nodos padre e hijos. De lo contrario, devuelve sólo los espacios de nombre usados en el nodo raíz.

Valores devueltos

El método getNamespaces devuelve un array de nombres de espacios de nombre con sus URIs asociadas.

Ejemplos

Ejemplo #1 Obtener el nombre de espacio 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

add a note add a note

User Contributed Notes 3 notes

up
8
harry at nospam dot thestorm dot plus dot com
8 years 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 />";
    }
}
?>
up
4
harry at nospam dot thestorm dot plus dot com
8 years ago
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;
}

?>
To Top