在xpath中获取GET语法

时间:2010-12-27 23:47:07

标签: php xml xpath

我正在尝试使用我在xpath查询中传递给页面的参数。这工作正常(硬编码):

<?php
$xml = simplexml_load_file("bookstore.xml");

$res = $xml->xpath("/bookstore/book[title = 'Everyday Italian']"); 

echo $res[0]->author

?>

但是我将参数传递给:

bookdetails.php?title="Everyday Italian"

然后执行:

<?php
$xml = simplexml_load_file("bookstore.xml");

$res = $xml->xpath("/bookstore/book[title = $_GET['title']]"); 

echo $res[0]->author

?>

我收到500错误。

有什么想法吗?

谢谢,

大卫

3 个答案:

答案 0 :(得分:0)

尝试使用urlencode('bookdetails.php?title=Everyday Italian')传递参数。

答案 1 :(得分:0)

PHP变量将扩展为一个字符串值,在XPATH表达式中计算时应该用引号括起来。

我不熟悉PHP,并且不确定嵌套引号(用于引用$_GET变量)在已经用单引号和双引号包装时如何工作。

我假设您可以通过连接字符串片段和变量来构建字符串:

$res = $xml->xpath("/bookstore/book[title = '" . $_GET['title'] . "']"); 

或者,您可以将值分配给可以不带引号引用的变量:

<?php
$xml = simplexml_load_file("bookstore.xml");
$title = $_GET['title'];
$res = $xml->xpath("/bookstore/book[title = '$title']"); 

echo $res[0]->author

?>

答案 2 :(得分:0)

$res = $xml->xpath("/bookstore/book[title = $_GET['title']]");

这是不正确的。在双引号字符串中插入数组/哈希元素时,不能引用索引值。以下任何一种都是正确的:

$res = $xml->xpath("/bookstore/book[title = {$_GET['title']}]"); // surround with {}
$res = $xml->xpath("/bookstore/book[title = $_GET[title]]"); // remove the '

当然,当不在双引号字符串的上下文中时,则执行:

$res = $_GET[title];

将PHP解释为'title'作为常量,很可能没有定义的值,因此代码将被解释为

$res = $_GET[];