Php,SimpleXMLIterator,RecursiveIteratorIterator

时间:2012-09-27 19:27:42

标签: php simplexml

我想了解我正在研究的代码的一小部分, 这是代码的Link,我不明白的部分是:

new RecursiveIteratorIterator($it, 1)

我对这部分不了解的是第二个参数,我尝试使用这个参数的值,我假设它是关于XML结构但是它的逻辑有点奇怪,所以如果有人可以请向我澄清这个第二个参数?

2 个答案:

答案 0 :(得分:4)

好的让我分解

您需要首先了解的是这一行:

 $it = simplexml_load_string($xmlstring, 'SimpleXMLIterator');

来自PHP DOC

  

您可以使用此可选参数,以便simplexml_load_string()将返回指定类的对象。

这意味着所有输出都将使用SimpleXMLIterator,迭代的最佳方式是使用RecursiveIteratorIterator

Recursion是以自我相似的方式重复项目的过程。 See wiki

示例

$xml = '
<movies>
  <movie>abcd</movie>
  <movie>efgh</movie>
  <movie>
    <name> Test </name>
    <type> Action </type>   
    </movie>    
</movies>';


echo "<pre>" ;
echo "With Just SimpleXmlIterator\n";

foreach (new SimpleXmlIterator($xml) as $value ) {
    print($value . PHP_EOL);
}


echo "<pre>" ;
echo " RecursiveIteratorIterator \n";

foreach (new RecursiveIteratorIterator  (new SimpleXmlIterator($xml)) as $value ) {
    print(trim($value) . PHP_EOL);
}

输出1

With Just SimpleXmlIterator
abcd
efgh

输出2

RecursiveIteratorIterator 
abcd
efgh
Test
Action

答案 1 :(得分:3)

您应该阅读RecursiveIteratorIterator constructor的文档。在此重现相关部分:

可选模式。可能的值是

  • RecursiveIteratorIterator :: LEAVES_ONLY - 默认值。列表仅在迭代中离开。
  • RecursiveIteratorIterator :: SELF_FIRST - 在父母出现的情况下迭代离开树叶和父母。
  • RecursiveIteratorIterator :: CHILD_FIRST - 在迭代中列出叶子和父项,首先是叶子。