【问题标题】:Simplexml: Select element by id a echo a certain child elementSimplexml:通过id选择元素回显某个子元素
【发布时间】:2013-08-29 01:13:08
【问题描述】:

我需要一些关于 simplexml xpath 的建议。我的整个网站都有一个主 XML 文件,如下所示:

<content>
<item id="001">
    <title>Video 1</title>
    <video>
        <file>video001.mp4</file>
        <dur>01:20</dur>
    </video>
</item>
<item id="2">
    <title>Video 2</title>
    <video>
        <file>video002.mp4</file>
        **<dur>03:53</dur>**
    </video>
</item>
</content>

现在我想回显 ID 为“2”的项目视频的持续时间,即字符串“03:53”。

似乎是 simplexml 的简单用法,但那里的大量教程仅涵盖循环和按数组编号选择。我想通过它的 id 访问一个父元素,并获取它的某个子元素的字符串。

提前致谢! 鲁娜

【问题讨论】:

    标签: php xpath simplexml


    【解决方案1】:

    您可以为此目的使用 XPath: http://php.net/manual/en/simplexmlelement.xpath.php

    你的代码应该看起来像这样(或多或少):

    $xml = simplexml_load_file('path/to/xml/file.xml');
    $result = $xml->xpath('/content/item[@id=2]/video/dur/text()');
    $result = $result[0];
    echo $result;
    

    这里是 phpFiddle http://phpfiddle.org/main/code/9hc-yqi

    您可能还应该将 xpath 结果转换为字符串,但我不确定。我刚刚在 http://www.xpathtester.com/ 中测试了这段代码的 xpath 部分,它工作得很好。

    【讨论】:

    • 在 PHP >= 5.4 中,你可以这样做 $result = $xml->xpath('/content/item[@id=2]/video/dur')[0];并删除下一行。
    • 谢谢,但它不能正常工作。我得到一个空响应,而不是字符串。省略行 $result = $result[0];给我“数组”。
    • 可能你的 PHP 版本低于 5.4,这很常见,除非你有最新的 WAMP/XAMP 版本(我假设你在本地主机上)。顺便提一句。如果有帮助,请接受我的回答。
    • PHP 版本 5.4.9 和 SimpleXML 在我的真实网络服务器上启用。上面提到的 xpathtester 说“没有找到”(xpathtester.com/obj/6d59e412-6334-40b0-a0e6-6b480242cea3)。 SimpleXML 并不像我想象的那么简单 :)
    • [@id=...] 似乎是问题所在。当我在其他脚本中替换 [0] 时,它会在 phptester 中引起同样的问题。
    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多