【问题标题】:xml problem with phpphp的xml问题
【发布时间】:2023-03-26 11:25:02
【问题描述】:

我正在尝试使用 xml 文件并从中检索所有链接。到目前为止我有:

$xmlHeadline = $xml->channel[0]->item[3]->link;
print($xmlHeadline);

这可以在 xml 中打印 item[3] 的单个标题链接。但正如你所看到的,它有 2 层深。然后下一个将在channel[0]->item[4]->link。没有频道1,只有channel[0]

互联网上的所有示例仅处理 1 级深度。他们都使用了foreach 循环,但我不确定是否可以在这里使用...

如何循环浏览 xml 中的所有项目并回显所有链接?

【问题讨论】:

    标签: php xml


    【解决方案1】:

    试试

    foreach ($xml->channel[0]->item as $item) {
        echo $item->link;
    }
    

    foreach ($xml->xpath('/channel/item/link') as $link) {
        echo $link;
    }
    

    【讨论】:

      【解决方案2】:

      我认为您需要一个 DOM 解析器,它允许您将 xml 作为结构化层次结构加载,然后使用 getElementById http://php.net/manual/en/domdocument.getelementbyid.php 之类的函数来解析 xml 并在任何深度获取您想要的特定项目。

      如果您提供 xml 文件的结构,我或许可以帮助您具体使用 DOM 函数。

      【讨论】:

        【解决方案3】:
        $str = '<channels><channel>
        <item><link>google.com</link></item>
        <item><link>google.com.cn</link></item>
        <item><link>google.com.sg</link></item>
        <item><link>google.com.my</link></item>
        </channel></channels>';
        $xml  = simplexml_load_string($str);
        $objs = $xml->xpath('//channel/item/link');
        

        PS:请附上一些你的xml的例子

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-04
          • 1970-01-01
          • 1970-01-01
          • 2012-01-12
          • 2013-05-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多