поиск xpath с помощью php - PullRequest
0 голосов
/ 21 марта 2012

Я пытаюсь найти документ XML с использованием XPATH по значению из формы, но я столкнулся с рядом ошибок.

Предупреждение: SimpleXMLElement :: xpath () [simplexmlelement.xpath]: недействительно выражение в строке 17

Предупреждение: SimpleXMLElement :: xpath () [simplexmlelement.xpath]: xmlXPathEval: оценка не выполнена в строке 17

Предупреждение. В foreach () указан неверный аргумент в строке 21

фрагмент кода holiday.xml

<channel>
    <item>
          <title>Holiday description</title> 
          <link>link</link> 
          <description>Holiday description</description> 
          <pubDate>Sun, 13 Feb 2011 11:58:17 GMT</pubDate> 
          <guid>http://site</guid> 
      </item>
</channel

txtSearch - текстовое значение, взятое из формы. Кто-нибудь может пролить свет на исправление этих ошибок?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

В этой строке есть ошибка $qry = "channel/item/[contains(text()),'$txtSearch']"; Неправильное закрытие скобки.также вы должны указать, в каком узле вы хотите искать, для узла description вы можете использовать следующий xpath: $qry = "//channel/item[description[contains(text(),\"$txtSearch\")]]";

update: конечно, вариант Гордона лучше: $qry = "//channel/item[contains(.,\"$txtSearch\")]";

2 голосов
/ 21 марта 2012

Изменить эту строку

$qry = "channel/item/[contains(text()),'$txtSearch']";

к этому

$qry = sprintf('channel/item[contains(., "%s")]', $txtSearch);

и тогда должно получиться.

Обратите внимание, что при использовании 'channel' запрос относится к SimpleXMLElement, для которого вы вызвали метод xpath. Используйте '/channel', если вы хотите начать с корневого узла. И используйте '//channel', когда вы хотите искать везде в документе.

Также посмотрите этот учебник по XPath .

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