我遇到了SimpleXMLIterator
的问题,并通过xml结构降序。我将其分解为这篇帖子最简单的形式:
<?php
$string = <<<'XML'
<test>
<group>
<script>
</script>
</group>
</test>
XML;
$iterator = new SimpleXMLIterator($string);
for($iterator->rewind() ; $iterator->valid() ; $iterator->next()){
echo $iterator->key() . "<br>";
}
我希望上面的代码会输出:
group
script
但是当我运行它时,它只输出group
。
当我移动xml以便组和脚本是兄弟姐妹时:
<?php
$string = <<<'XML'
<test>
<group>
</group>
<script>
</script>
</test>
XML;
$iterator = new SimpleXMLIterator($string);
for($iterator->rewind() ; $iterator->valid() ; $iterator->next()){
echo $iterator->key();
}
我让小组和剧本都得到了回应。
我一直在阅读有关迭代器的文档,但我没有看到任何说它不会传给孩子们的东西。我误解了这个工具吗?
答案 0 :(得分:1)
具有两个节点的第二个xml在同一级别上。然而,第一个节点具有第一个节点,而第二个节点位于内部,因此不会遍历。所以你需要以递归的方式遍历它。
在这种情况下,您可以使用RecursiveIteratorIterator
:
$string = <<<'XML'
<test>
<group>
<script>
</script>
</group>
</test>
XML;
$xmliterator = new SimpleXMLIterator($string);
$iterator = new RecursiveIteratorIterator($xmliterator, RecursiveIteratorIterator::SELF_FIRST);
for($iterator->rewind() ; $iterator->valid() ; $iterator->next()){
echo $iterator->key() . "<br>";
}