PHP 8.4.1 Released!

SimpleXMLElement::getNamespaces

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

SimpleXMLElement::getNamespaces Returns namespaces used in document

Descrizione

public SimpleXMLElement::getNamespaces(bool $recursive = false): array

Returns namespaces used in document

Elenco dei parametri

recursive

If specified, returns all namespaces used in parent and child nodes. Otherwise, returns only namespaces used in root node.

Valori restituiti

The getNamespaces method returns an array of namespace names with their associated URIs.

Esempi

Example #1 Get document namespaces in use

<?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);

?>

Il precedente esempio visualizzerà:

array(1) {
  ["p"]=>
  string(21) "http://example.org/ns"
}

Vedere anche:

add a note

User Contributed Notes 3 notes

up
8
harry at nospam dot thestorm dot plus dot com
12 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
7
harry at nospam dot thestorm dot plus dot com
12 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