ПОЛУЧИТЬ синтаксис в xpath - PullRequest
2 голосов
/ 28 декабря 2010

Я пытаюсь использовать параметр, который я передаю на страницу в запросе 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.

Есть мысли?

Спасибо

David

Ответы [ 3 ]

0 голосов
/ 28 декабря 2010

Переменная 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

?>
0 голосов
/ 28 декабря 2010
$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[];
0 голосов
/ 28 декабря 2010

Попробуйте передать параметр с помощью urlencode('bookdetails.php?title=Everyday Italian').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...