Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在遍历PHP SimpleXML对象时获得重复结果_Php_Xml_Parsing - Fatal编程技术网

在遍历PHP SimpleXML对象时获得重复结果

在遍历PHP SimpleXML对象时获得重复结果,php,xml,parsing,Php,Xml,Parsing,当我遍历以下树:,一些结果会加倍。也就是说,例如,它将“集合论”主题部分打印两次,包括所有内容。您可以在此处看到有问题的结果: 问题截图 PHP $value){ 如果($key==“title”){ 回显“$object->title.”; }else if($key==“主题”){ //遍历子元素(如果有) 回声“”; foreach($object->topicas$num=>$thatTopic){ 回声“”; traverseObject($thatTopic); 回声“”; } 回

当我遍历以下树:,一些结果会加倍。也就是说,例如,它将“集合论”主题部分打印两次,包括所有内容。您可以在此处看到有问题的结果:

问题截图

PHP
$value){
如果($key==“title”){
回显“$object->title.”;
}else if($key==“主题”){
//遍历子元素(如果有)
回声“
    ”; foreach($object->topicas$num=>$thatTopic){ 回声“
  • ”; traverseObject($thatTopic); 回声“
  • ”; } 回声“
”; }否则{//现在跳过其余部分 } } } traverseObject($库); ?>
XML

用户ID095209376的库
集合论
公理
分离公理
分离公理
无限公理
无限公理
无限公理
历史
很久以前,在一个遥远的星系。。。
分析
赋范向量空间
赋范向量空间
向量空间
向量空间
定义
向量空间是一个。。。

所以我的算法是错误的。很难分析到底是什么不起作用,但下面是更正:

输出

PHP
$value){
如果($key==“title”){
回显“
  • ”$object->title.“
  • ”; }else if($key==“主题”){ //遍历子元素(如果有) traverseObject($value); }else if($key==“id”){ 回显“id:.$value.”; }否则{//现在跳过其余部分 } } 回声“”; } traverseObject($库); ?>
    <?php
    
    $library = simplexml_load_file('library.xml');
    if($library == null){
    
        echo "uh oh, null library";
    
    }
    
    function traverseObject($object) 
    {
        foreach ($object as $key => $value ){
            if($key == "title"){
                echo "<b>" . $object->title . "</b>";           
            } else if ($key == "topic"){
                // traverse child elements, if any
                echo "<ul>";
                foreach ( $object->topic as $num => $thatTopic ){
                    echo "<li>";
                    traverseObject($thatTopic);
                    echo "</li>";
                }
                echo "</ul>";
            } else { // skip the rest for now
            }
        }
    }
    
    traverseObject($library);
    
    ?>
    
    <?xml version="1.0" encoding="UTF-8"?>
    <library userid="095209376">
        <title>UserID095209376's Library</title>
        <topic>
            <title>Set Theory</title>
            <topic>
                <title>Axioms</title>
                <topic>
                    <title>Axiom of Separation</title>
                    <id>axiom-of-separation</id>
                </topic>
                <topic>
                    <title>Axiom of Infinity</title>
                    <id>axiom-of-infinity</id>
                    <entry>
                        <title>Axiom of Infinity</title>
                        <section>
                            <title>History</title>
                            <body>
                                Long ago, in a galaxy far far away...
                            </body>
                        </section>
                    </entry>
                </topic>
            </topic>
         </topic>
         <topic>
            <title>Analysis</title>
            <topic>
                <title>Normed Vector Spaces</title>
                <id>normed-vector-spaces</id>
                <topic>
                    <title>Vector space</title>
                    <id>vector-space</id>
                    <entry>
                        <section>
                            <title>Definition</title>
                            <body>A vector space is a...</body>
                        </section>
                    </entry>
                </topic>
            </topic>
         </topic>
    </library>
    
    <?php
    
    error_reporting(E_ALL);
    
    $library = simplexml_load_file('library.xml');
    if($library == null){
    
        echo "uh oh, null library";
    
    }
    
    function traverseObject($object) 
    {
        echo "<ul>";
        foreach ($object as $key => $value ){
            if($key == "title"){
                echo "<li><b>" . $object->title . "</b></li>";          
            } else if ($key == "topic"){
                // traverse child elements, if any
                traverseObject($value);
            } else if($key == "id"){
                echo "<i>id: " . $value . "</i>"; 
            } else { // skip the rest for now
            }
        }
        echo "</ul>";
    }
    
    traverseObject($library);
    
    ?>