php - 使用 PHP 解析 XML 导航站点地图

标签 php xml sitemap

我正在从一个 XML 文件中实现一个 PHP 站点地图解析器。我做得比较好。但是,我需要解析器更加动态。我需要实现一个递归函数 will 继续为找到的每个 child_node 循环。一个节点可以在另一个子节点中包含许多子节点。到目前为止,我所做的是为每个 child_node 实现一个具有不同变量名的单独 foreach 循环,但是这是 Not Acceptable ,因为它不那么灵活。

这是我的 xml 文件:

<sitemap>
    <node>
        <id>rootnode</id>
        <link>home.html</link>
    </node>
    <node>
        <id>about</id>
        <link>about.html</link>
    </node>
    <node>
        <id>contact</id>
        <link>contact.html</link>
        <child_node>
            <id>contact_uk</id>
            <link>contact_uk.html</link>
            <child_node>
                <id>customer_support_uk</id>
                <link>customer_support_uk.html</link>
            </child_node>
        </child_node>
        <child_node>
            <id>contact_usa</id>
            <link>contact_usa.html</link>
        </child_node>
    </node>

    <node>
        <id>products</id>
        <link>products.html</link>
    </node>
</sitemap>

您可以注意到节点联系人在 child_node 中有一个 child_node。这是我需要递归函数的地方。

这是我当前的 PHP 代码:

    $source = 'sitemap.xml';


    // load as file
    $sitemap = simplexml_load_file($source, null, true);


    foreach ($sitemap->node as $node) {

        if ($node->child_node != "") {
            echo "$node->link<br/>";
            foreach ($node->child_node as $child) {
                if ($child->child_node != "") {
                    echo "&nbsp;&nbsp;" . $child->link . "<br/>";
                    foreach ($child->child_node as $innerchild) {
                        echo "&nbsp;&nbsp;&nbsp;&nbsp;" . $innerchild->link . "<br/>";
                    }
                } else {
                    echo "&nbsp;&nbsp;" . $child->link . "<br/>";
                }
            }
        } else {
            echo "$node->link<br/>";
        }
    }

此 PHP 具有正确的输出,但我必须为其父 child_node 中的每个 child_node 创建另一个单独的 foreach 循环。有人可以指出正确的方向,告诉我如何更改我的 PHP 代码,以便遍历站点地图中找到的 child_node 中的每个 child_node 吗?

非常感谢!

最佳答案

未测试...但应该可以:

function print_node($node, $level){
 echo str_repeat("-",$level);
 echo "$node->link\n";
 if ($node->child_node != "") {
       foreach ($node->child_node as $child) {
          print_node($child,$level+1);
       }
  }

}
$source = 'sitemap.xml';


$sitemap = simplexml_load_file($source, null, true);
foreach ($sitemap->node as $node)
    print_node($node,0);

关于php - 使用 PHP 解析 XML 导航站点地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5043654/

相关文章:

php - 用于验证以下类型模式的正则表达式

php - 包含 PHP,当包含的 PHP 代码用于不同目录中的文件时不起作用

php - 使用两个类查询 PDO

python - 在heroku上使用带有django的站点地图包

c# - Sitecore:如何通过 URL 获取媒体库项目?

php - 如何在 PHP 中创建加密的 PDF,并在 PDF Reader 中下载后可以解密?

xml - 转义 Oracle XDB 中的控制字符

javascript - d3js 加载静态 svg 在 IE9 中不起作用(responseXML = null)

java - JAXB 抛出 InstantiationException 试图编码 xsi :type based on abstract class

c# - 如何通过其 URL(或其他键)查找 SiteMapNode?