PHP SimpleXML函数

PHP SimpleXMLElement::getDocNamespaces() 方法返回文档中声明的命名空间。

语法

public SimpleXMLElement::getDocNamespaces(recursive, fromRoot) 

参数

recursive可选。 如果设置为 true,则返回父节点和子节点中声明的所有命名空间。否则,仅返回根节点中声明的命名空间。默认值为 false。
fromRoot可选。 如果设置为 false,则允许递归检查子节点下的命名空间,而不是从 XML 文档的根开始。默认值为 true。

返回值

返回命名空间名称及其关联 URI 的数组。

示例:获取文档命名空间

下面的示例显示了 SimpleXMLElement::getDocNamespaces() 方法的用法。

<?php
$xmlstr = <<<XML
<userlist xmlns:p="http://example.com/test">
  <p:user id="John123">
    <name>John Smith</name>
    <city>New York</city>
    <phone>+1-8054098000</phone>
  </p:user>
  
  <p:user id="Marry2015">
    <name>Marry G.</name>
    <city>London</city>
    <phone>+33-147996101</phone>
  </p:user> 
</userlist> 
XML;

$xml = new SimpleXMLElement($xmlstr);

$namespaces = $xml->getDocNamespaces();
var_dump($namespaces);
?> 

上述代码的输出将是:

array(1) {
  ["p"]=>
  string(24) "http://example.com/test"
} 

示例:使用多个命名空间

再考虑一个示例,该示例演示了如何工作使用此函数时具有多个命名空间。

<?php
$xmlstr = <<<XML
<userlist xmlns:p="http: //example.com/test1" xmlns:t="http://example.com/test2">
  <p:user id="John123">
    <name>John Smith</name>
    <city>New York</city>
    <phone xmlns:ph="http://example.com/phone">+1-8054098000</phone>
  </p:user>
  
  <t:user id="Marry2015">
    <name>Marry G.</name>
    <city>London</city>
    <phone xmlns:ph="http://example.com/phone">+33-147996101</phone>
  </t:user> 
</userlist> 
XML;

$xml = new SimpleXMLElement($xmlstr);

$namespaces = $xml->getDocNamespaces(true);
var_dump($namespaces);
?> 

上述代码的输出将是:

array(3) {
  ["p"]=>
  string(24) "http://example.com/test1"
  ["t"]=>
  string(24) "http://example.com/test2"
  ["ph"]=>
  string(24) "http://example.com/phone"
}