SimpleXMLElement::getNamespaces
(PHP 5 >= 5.1.2)
SimpleXMLElement::getNamespaces — Returns namespaces used in document
Description
public array SimpleXMLElement::getNamespaces
([ bool
$recursive
= false
] )Returns namespaces used in document
Parameters
-
recursive
-
If specified, returns all namespaces used in parent and child nodes. Otherwise, returns only namespaces used in root node.
Return Values
The getNamespaces method returns an array of namespace names with their associated URIs.
Examples
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);
?>
The above example will output:
array(1) { ["p"]=> string(21) "http://example.org/ns" }
See Also
- SimpleXMLElement::getDocNamespaces() - Returns namespaces declared in document
- SimpleXMLElement::registerXPathNamespace() - Creates a prefix/ns context for the next XPath query
- Функция SimpleXMLElement::addAttribute() - Добавляет атрибут к SimpleXML-элементу
- Функция SimpleXMLElement::addChild() - Добавляет дочерний элемент к узлу XML
- Функция SimpleXMLElement::asXML() - Возвращает сформированный XML документ в виде строки используя SimpleXML элемент
- Функция SimpleXMLElement::attributes() - Возвращает атрибуты элемента
- Функция SimpleXMLElement::children() - Поиск дочерних элементов данного узла
- Функция SimpleXMLElement::__construct() - Создание нового SimpleXMLElement объекта
- Функция SimpleXMLElement::count() - Считает количество дочерних элементов у текущего элемента
- Функция SimpleXMLElement::getDocNamespaces() - Возвращает объявленное пространство имен в документе
- Функция SimpleXMLElement::getName() - Получение имени XML элемента
- Функция SimpleXMLElement::getNamespaces() - Получение пространств имен, используемых в документе
- Функция SimpleXMLElement::registerXPathNamespace() - Создает префикс/пространство имен контекста для следующего XPath запроса
- Функция SimpleXMLElement::saveXML() - Псевдоним SimpleXMLElement::asXML
- Функция SimpleXMLElement::__toString() - Returns the string content
- Функция SimpleXMLElement::xpath() - Запускает XPath запрос к XML данным
Коментарии
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;
}
?>
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 />";
}
}
?>
this article has more info : http://www.sitepoint.com/parsing-xml-with-simplexml/