我正在使用 SimpleXMLIterator 来解析一些 XML。执行 print_r 表明从 XML 创建的 SimpleXMLIterator 对象是这样的:{
[@attributes] => Array
(
[id] => abc
[type] => a
[timestamp] => 2001-12-12
)
[place] => US
[name] => Pete
[dob] => SimpleXMLIterator Object
(
[dd] => 03
[mm] => 05
[yyyy] => 1973
)
}
它还包含一个 dob SimpleXMLIterator Object - 即 XML 标记的子元素。
我使用以下代码迭代此对象,这是递归的,因为我无法确定每个 XML 标记的深度:
function _prepareSimpleXMLIteratorObj(SimpleXMLIterator $xmlIterator) {
foreach ($xmlIterator as $key => $value){
// Count returns the number of children
if ($value->count() > 0) {
$this->_prepareSimpleXMLIteratorObj($value);
} else {
$this->assocArray[$key] = (string)$value;
}
}
}
assocArray 是类的成员变量。这会从 Object 生成一个关联数组。
问题是当我使用 $value->hasChildren() 而不是 $value->count() 我得到错误,即使 $value->count() 为 dob 返回 3?任何想法我做错了什么?如果是的话
if (($value instanceof SimpleXMLIterator))
我得到了错误,即使 dob 显然是一个 SimpleXMLIterator 对象?
此方法有效,但我只是想知道 hasChildren 和 instanceof?
这是示例 XML
<tag id="abc" type="a" timestamp="2001-12-12">
<place>US</place>
<name>Pete</name>
<dob>
<dd>03</dd>
<mm>05</mm>
<yyyy>1973</yyyy>
</dob>
</tag>
谢谢