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オブジェクト(つまり、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は、クラスのメンバー変数です。これにより、オブジェクトから連想配列が生成されます。
問題は、$ value-> count()の代わりに$ value-> hasChildren()を使用すると、$ value-> count()がdobに対して3を返しても、falseになることです。私が間違っていることについて何か考えはありますか?また、もしそうなら
if (($value instanceof SimpleXMLIterator))
dobは明らかにSimpleXMLIteratorオブジェクトですが、falseになりますか?
この方法は機能しますが、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>
ありがとう