PHP SimpleXML函数

PHP SimpleXMLElement::children() 方法查找元素的子元素。结果遵循正常的迭代规则。

语法

public SimpleXMLElement::children(namespaceOrPrefix, isPrefix) 

参数

namespaceOrPrefix可选。 指定 XML 命名空间。
isPrefix可选。 如果为 true,namespaceOrPrefix 将被视为前缀。如果为 false,namespaceOrPrefix 将被视为命名空间 URL。

返回值

返回 SimpleXMLElement 元素,无论节点是否有子节点。

示例:遍历children()

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

<?php
$xmlstr = <<<XML
<userlist> 
  <user id="John123" game="lonely">
    <name>John Smith</name>
    <city>New York</city>
  </user>
  
  <user id="Marry2015" game="group">
    <name>Marry G.</name>
    <city>London</city>
  </user>

  <user id="Gaurav" game="group">
    <name>Gaurav K.</name>
    <city>India</city>
  </user>   
</userlist> 
XML;

$xml = simplexml_load_string($xmlstr);

//显示id子项
foreach ($xml->children() as $x) {
  echo $x['id']."\n";
}

echo "\n";

//显示整个SimpleXMLElement元素
foreach ($xml->children() as $x) {
  var_dump($x);
}
?> 

上述代码的输出将类似于:

John123
Marry2015
Gaurav

object(SimpleXMLElement)#5 (3) {
  ["@attributes"]=>
  array(2) {
    ["id"]=>
    string(7) "John123"
    ["game"]=>
    string(6) "lonely"
  }
  ["name"]=>
  string(10) "John Smith"
  ["city"]=>
  string(8) "New York"
}
object(SimpleXMLElement)#4 (3) {
  ["@attributes"]=>
  array(2) {
    ["id"]=>
    string(9) "Marry2015"
    ["game"]=>
    string(5) "group"
  }
  ["name"]=>
  string(8) "Marry G."
  ["city"]=>
  string(6) "London"
}
object(SimpleXMLElement)#5 (3) {
  ["@attributes"]=>
  array(2) {
    ["id"]=>
    string(6) "Gaurav"
    ["game"]=>
    string(5) "group"
  }
  ["name"]=>
  string(9) "Gaurav K."
  ["city"]=>
  string(5) "India"
} 

示例:使用命名空间

再考虑一个示例,其中此方法是使用包含名称空间的 XML 数据。

<?php
$xmlstr = <<<XML
<userlist xmlns:p="player.data"> 
  <p:user>John Smith</p:user>
  <user>Marry G.</user>
  <p:user>Gaurav K.</p:user>   
</userlist> 
XML;

$xml = simplexml_load_string($xmlstr);

//以"p"为命名空间的子项数量
$player = $xml->children('p');
var_dump(count($player));

//以"p"为前缀的子项数量
$player = $xml->children('p', TRUE);
var_dump(count($player));

//以"player.data"作为命名空间的子项数量
$player = $xml->children('player.data');
var_dump(count($player));

//以"player.data"为前缀的子项数量
$player = $xml->children('player.data', TRUE);
var_dump(count($player));

//没有任何命名空间或前缀的子项数量
$player = $xml->children();
var_dump(count($player));
?> 

上述代码的输出将类似于:

int(0)
int(2)
int(2)
int(0)
int(1)