根据manual:
返回SimpleXMLElement元素,无论节点是否有子节点。
但首先,这对我来说没有意义。 children()肯定会返回一个SimpleXMLElements数组。如果节点有多个子节点,那么如何返回单个SimpleXMLElement可能代表该节点?
其次,这与手册中的示例无关:
foreach ($xml->children() as $second_gen)
echo ' The person begot a ' . $second_gen['role'];
你如何通过SimpleXMLElement进行预告?我以为你只能用阵列做到这一点?另外,$ second_gen值是怎么回事?所以children()返回一个关联数组数组......?
这里必须有一些深入的PHP语法规则,我不知道,所以请解释或指向相关的手册页。
答案 0 :(得分:4)
为什么不亲自尝试(demo):
$foo = new SimpleXmlElement(
'<foo>
<bar>
<baz id="b1"/>
<baz id="b2"/>
<baz id="b3"/>
</bar>
</foo>
');
然后做
var_dump($foo->bar->baz[0]->children());
输出
object(SimpleXMLElement)#4 (0) {}
然后做
var_dump($foo->bar->children());
输出
object(SimpleXMLElement)#2 (1) {
["baz"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#3 (0) {
}
[1]=>
object(SimpleXMLElement)#5 (0) {
}
[2]=>
object(SimpleXMLElement)#6 (0) {
}
}
}
你如何通过SimpleXMLElement进行预告?我以为你只能用数组做到这一点?
嗯,那是错的。您可以预先处理任何Traversable(例如对象和数组等)以及实现Iterator接口的任何对象。这是SimpleXmlElement
Class [ <internal:SimpleXML> <iterateable> class SimpleXMLElement implements Traversable ] {
另外,$ second_gen值是怎么回事?所以children()返回一个关联数组数组......?
不,它没有。它返回SimpleXmlElement
。通过Array Access访问SimpleXmlElement
从当前节点获取属性(或者如果是数字,则按位置访问子节点),例如
echo $foo->bar->baz[2]['id']; // prints "b3"
这有些不明显,因为SimpleXmlElement
没有实现ArrayAccess
,但它是implemented in C的方式。有关更多示例,请参阅http://www.php.net/manual/en/simplexml.examples-basic.php。
答案 1 :(得分:1)
来自手册
注意:SimpleXML制定了向大多数添加迭代属性的规则 方法。无法使用var_dump()或其他任何内容查看它们 可以检查对象。
这只意味着可以迭代返回的对象。因此,即使您获得了一个对象,您也可以遍历它。
只需看看课程定义:http://www.php.net/manual/en/class.simplexmlelement.php (注意它实现了traversable)
由于您遍历的每个对象本身都是一个SimpleXML对象,因此您只需在其上调用children()
即可更深入一级。