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)