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

2024-07-01

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

这是我的 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP 解析 XML 导航站点地图 的相关文章

  • 使用 php 脚本从不同网站读取文件

    如何从完全不同的服务器读取文件的内容 然后显示内容 我稍后将更改代码以正确地使用返回的信息 您可以使用file get contents http php net file get contents or cURL http php net
  • 可以用 PHP 设置表单字段值吗?

    我使用 GET 函数从 url http index html variable value 中提取一个带有 php 的值 这是基本的东西 但是 我需要在我的表单中使用该值 通常 我会设置 或类似的东西 但是 我无法使用我正在使用的编辑器在
  • 当用户使用 Internet Explorer 时重定向到新页面

    我使用下面的代码将使用 Internet Explorer 的用户重定向到新页面 但显然代码有问题 因为当我使用 Internet Explorer 时该网站不再加载 这是代码 由于我不知道我做错了什么 如果有人可以发布使用正确编码的正确方
  • 我可以在 javascript 中使用 php 吗?

    初学者的问题 我可以在 JavaScript 中使用 PHP 吗 例如在 jquery 中 triggers eq 1 post PHP 在服务器端执行 JavaScript 在客户端执行 但是你可以像这样打印 PHP 变量 trigger
  • 将画布图像保存到服务器

    我正在尝试将画布图像保存到服务器 我可以保存文件 但它始终是 0 字节 我的代码有什么问题吗 php
  • php 字符串与通配符 * 匹配?

    我想提供将字符串与通配符匹配的可能性 Example mystring dir folder1 file pattern dir file stringMatchWithWildcard mystring pattern gt Return
  • reCaptcha 值未出现在 $_POST 中

    我正在尝试在我的网站上使用 reCaptcha 并且 recaptcha challenge field 和 recaptcha response field 没有添加到后端的 POST 数组中 但我表单中的其余变量是 有任何想法吗 我已经
  • argv 和 argc 未定义或为 null

    当我在 construct 中尝试这个时 var dump argc var dump argv var dump SERVER argv 它返回错误 未定义的变量 argc 和未定义的变量 argv 和数组 大小 0 空 当我在全局中声明
  • HTACCESS 404 错误无法正常工作

    问题 在此服务器上找不到请求的 URL welcome php 此外 尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误 事情是这样的 当我访问 www mysite com page 时它工作正常 如果
  • PHP Serialize() ― 规范 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找有关 PHP serial
  • 正确使用 GuzzleHttp/Psr7/Response

    不确定在 php 页面中显示 Psr7 Guzzle Response 的正确方法是什么 现在 我正在做 use GuzzleHttp Psr7 BufferStream use GuzzleHttp Psr7 Response class
  • 如何使用 PHP 访问关联数组中的值

    我有一个数组 它是使用 Amazon SimpleDb 进行选择查询的结果 这是我 print r result 时的示例数据 Array 0 gt Array Name gt 5140ede647e74 Attributes gt Arr
  • 如何抑制对话框

    我已将以下对话框标记为 WiX 中的隐藏 但当文件正在使用时 它仍然在卸载时显示
  • 如何在带有 PHP-FPM 和 NGINX 的 Ubuntu 18.04 LTS 中使用 Oracle Instant Client 启用 OCI8 PHP 扩展?

    我使用的是最新的 PHP 包https launchpad net ondrej archive ubuntu php https launchpad net ondrej archive ubuntu php 当我构建并安装 OCI8 扩
  • 如何使用 PHP 在我的安全站点上显示受保护的 Amazon S3 图像?

    我正在尝试将我的网站的图像从我的主机移动到 Amazon S3 云托管 这些图像是客户工作场所的图像 无法公开提供 我希望它们最好通过使用 Amazon 提供的 PHP SDK 来显示在我的网站上 到目前为止 我已经能够编写转换脚本 以便在
  • 为什么 PHP 函数调用*如此*昂贵?

    PHP 中的函数调用是昂贵的 这是一个测试它的小基准
  • 购物车商品未显示在客户视图中

    运行 Magento 1 7 2 当在管理员的客户视图中时 它显示客户购物车中的 1 件商品 但不显示详细信息 我附上了屏幕截图 有谁知道问题可能是什么 或者您能否验证它是否正常工作 以便我知道这是我的安装 Thanks 在此处查看屏幕截图
  • awk 单引号或双引号的用法

    为什么 awk 命令使用单引号和双引号不能产生相同的结果 root vm90 root who awk print 2 root vm90 root who awk print 2 我想在 PHP shell exec 函数中使用 awk
  • 如何使用 php 回显图像

    我试图从我的 images 文件夹中回显图像 但如果我编写以下代码 它仅适用于我的网站 echo img src 我已将其更改为这样 以便当其他人使用我的主题时 会将他们带到他们自己的网站目录 echo img src 但是当我放置该代码并
  • PHPStorm + PHPUnit 颜色输出

    因此 我在 PHPStorm 7 1 中运行 PHPUnit 但我不知道如何在测试中使 ANSI 颜色代码正常工作 我的 PHPunit xml 有colors true 在属性列表中 但每次我尝试类似的操作 echo 033 31mErr

随机推荐

  • 在 UITextView 内画一条线 - NSAttributedString

    我想在里面画一条可定制的线UITextView由一些文本组成 使用NSAttributedString 这是我尝试过的 NSString unicodeStr NSString stringWithFormat C C C 0x00A0 0
  • 执行时忽略字符串列

    我使用以下代码来标准化 pandas DataFrame df norm df df mean df max df min 当所有列都是数字时 此方法效果很好 但是 现在我有一些字符串列df并且上述标准化有错误 有没有办法只对数据帧的数字列
  • 在简单/未命名的 C# LINQ 组连接中排序内部密钥源

    我知道这个问题由于用词不同而读起来很奇怪 但这是使用的术语这个 MSDN 页面 http msdn microsoft com en us library bb311040 aspx从我正在学习 LINQ 组的地方开始 我将解释它们 我正在
  • IE7 中的多个选项卡和一个工具栏实例

    我用 C 开发了一个用于 Internet Explorer 的工具栏 用于从外部应用程序发送和接收 URL 它在 IE6 中运行得很好 但我想在新版本 IE7 中利用选项卡式浏览 但我在那里遇到了障碍 似乎在 IE7 中 每个选项卡都有一
  • 如何声明一个对所有模块的 build.gradle 文件可见的常量?

    我有一个具有多个模块的项目 库和应用程序 每次Android新版本出现时 我都需要升级所有模块的targetSdk compileSdk buildToolsVersion等 常数可以帮助完成这项乏味的工作 如何定义对所有模块的 build
  • 在决定我是否需要请求增加允许的安装数量时,Delphi 激活会考虑哪些因素 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在VMWare下的Windows7虚拟机中安装了XE4 我的问题是 Delphi 保护系统在决定我是否已使用 另一个 允许的安装之一时会
  • Office 加载项 Outlook API 使用 displayNewMessageForm 方法附加文档问题

    我正在开发 Outlook 的 Office 插件 需要打开带有预定义附件的新邮件 尝试从当前项目 消息 获取附件 如下所示 Office context mailbox item attachments 这是一个输出 我得到附件类型 id
  • 如何将复杂属性从父作用域继承到指令的隔离作用域中

    在查看了 AngularJS 和相关 文档以及有关指令中隔离范围的其他 stackoverflow 问题后 我仍然有点困惑 为什么我不能在父作用域和指令隔离作用域之间进行双向绑定 其中父作用域属性是对象而不是属性 我应该只使用所需的属性吗s
  • 对于 Android 开发,我可以在图像视图上使用 JPG 图像而不是 PNG 图像吗?

    这个问题的主要目的是了解考虑以下场景 在 Android 开发中选择 PNG 和 JPG 的最佳选择是什么 1 使用jpg图像作为背景是一个好的选择吗 2 与 png 相比 jpg 图像的加载时间会更长吗 3 与 png 相比 jpg 会花
  • 当用户使用 Internet Explorer 时重定向到新页面

    我使用下面的代码将使用 Internet Explorer 的用户重定向到新页面 但显然代码有问题 因为当我使用 Internet Explorer 时该网站不再加载 这是代码 由于我不知道我做错了什么 如果有人可以发布使用正确编码的正确方
  • 为什么我收到 TypeError: array[i] is undefined? [复制]

    这个问题在这里已经有答案了 因此 在我的程序中 我有一个包含值的字典 散列的数组 当我循环遍历该数组时 我得到了我需要的值 但 for 循环之后的任何代码都不会执行 因为控制台输出 TypeError array i is undefine
  • 使用 Python 映射字母数字字符串

    我有一个姓名数据集 根据名称的字母数字字符串 我需要将它们映射到子名称 如下所示 Name Subname 9 AIF 09 9A09 980 PD Z09A 980P09 15 KIC 12 15K12 PIA 110H P 110 IC
  • 跨三个表的 LEFT JOIN(带有连接表)

    在Postgres中 有没有办法执行left join在由联结表链接的表之间 并在链接表上进行一些过滤 比如说 我有两张桌子 humans and pets 我想执行一个查询 其中包含人类 ID 和宠物名称 如果人类 ID 存在 但他们没有
  • Angular 5:表内的动态表单验证

    我正在尝试使用表单组验证表内的输入字段 但无法实现相同的目标 我使用 ngFor 来迭代数据 因为我必须在表的第一列中显示该数据 而其他列只是输入文本字段 我必须在其中添加表单验证 因此 我添加了该字段的唯一表单控件名称的索引 HTML代码
  • 有关堆栈大小的警告消息

    I use Visual Studio 2010 with Code Analysis活性 在我的代码中 有一行在函数中分配一些内存 TCHAR someString 40000 代码分析抛出警告信息 警告 C6262 函数使用 40000
  • Firebase 和 Google Play 服务之间要使用哪些依赖项?

    我最近开始使用 Firebase 但我无法完全理解它与 Google Play Services 的关系 我知道Firebase是一个移动平台 在Android上它是基于Google Play Services的 但是为什么有一些模块与Go
  • 如何在JNA中填充结构体数组?

    我正在尝试在 JNA 中使用以下 Windows API UINT WINAPI GetRawInputDeviceList Out opt PRAWINPUTDEVICELIST pRawInputDeviceList Inout PUI
  • Java 中的简单 Kerberos 客户端?

    Google Chrome 和 IE 等应用程序可以透明地处理 Kerberos 身份验证 但是我找不到一个 简单 的 Java 解决方案来匹配这种透明度 我发现的所有解决方案都需要存在 krb5 conf 文件和 login conf 文
  • 找不到 PHPUnit 的 TextUI/command.php

    我为我的 symfony2 项目安装了 phpunit 如下所示 如何使用从composer安装的phpunit https stackoverflow com questions 13764309 how to use phpunit i
  • 使用 PHP 解析 XML 导航站点地图

    我正在从 XML 文件实现 PHP 站点地图解析器 我做得相对不错 但是 我需要解析器更加动态 我需要实现一个递归函数 它将继续循环找到的每个 child node 一个节点可以在另一个 child node 中包含许多 child nod