Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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:按id选择元素,并返回某个子元素_Php_Xpath_Simplexml - Fatal编程技术网

Php Simplexml:按id选择元素,并返回某个子元素

Php Simplexml:按id选择元素,并返回某个子元素,php,xpath,simplexml,Php,Xpath,Simplexml,我需要一些关于simplexml xpath的建议。我的整个网站都有一个主XML文件,如下所示: <content> <item id="001"> <title>Video 1</title> <video> <file>video001.mp4</file> <dur>01:20</dur> </video> <

我需要一些关于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>

视频1
视频001.mp4
01:20
视频2
video002.mp4
**03:53**
现在我想回显id为“2”的项的视频的持续时间,它将是字符串“03:53”

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

提前谢谢!
Runa

您可以为此使用XPath:

您的代码应该如下所示(或多或少):

这是PHPFIDLE


可能您还应该对字符串强制转换xpath结果,但我不确定。我刚刚在内部测试了这段代码的xpath部分,它工作得很好。

您可以使用xpath实现这一目的:

您的代码应该如下所示(或多或少):

这是PHPFIDLE


可能您还应该对字符串强制转换xpath结果,但我不确定。我刚刚在内部测试了这段代码的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在我真正的Web服务器上启用。上面提到的xpathtester说“什么也没找到”()。SimpleXML并不像我想的那么简单:)问题似乎出在[@id=…]。在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在我真正的Web服务器上启用。上面提到的xpathtester说“什么也没找到”()。SimpleXML并不像我想的那么简单:)问题似乎出在[@id=…]。当我将[0]替换为其他脚本中的[0]时,它会在phpter中引起同样的问题。
$xml = simplexml_load_file('path/to/xml/file.xml');
$result = $xml->xpath('/content/item[@id=2]/video/dur/text()');
$result = $result[0];
echo $result;