2012-03-21 3 views
0

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

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

Внимание: SimpleXMLElement :: XPath() [simplexmlelement.xpath]: xmlXPathEval: оценка потерпел неудачу на строка 17

Внимание: Недействительный аргумент для Еогеаспа() в строке 21

holidays.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

Изменение этой линии

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

к этому

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

, а затем он должен работать.

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

Также взгляните на это XPath tutorial.

2

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

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