2012-03-21 1 views
0

XPATH를 사용하여 양식의 값을 사용하여 XML 문서를 검색하려하지만 많은 오류가 발생했습니다.PHP로 검색하는 xpath

경고 : SimpleXMLElement :: XPath는() [simplexmlelement.xpath] : 행에 잘못된 식 (17)

경고 : SimpleXMLElement :: XPath는() 는 [simplexmlelement.xpath] : xmlXPathEval : 평가가 실패 라인 (17)

경고 : 21

holidays.xml이

,536 니펫 라인의 foreach에 대한 공급 잘못된 인수()
<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 = sprintf('channel/item[contains(., "%s")]', $txtSearch); 

에 라인

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

후 작동합니다.

'channel'을 사용할 때 쿼리는 xpath 메서드를 호출 한 SimpleXMLElement에 상대적이라는 점에 유의하십시오. 루트 노드에서 시작하려면 '/channel'을 사용하십시오. 그리고 문서의 모든 부분을 검색하려면 '//channel'을 사용하십시오.

또한 XPath tutorial을 살펴보십시오.

2

이 라인에 오류가 있습니다. $qry = "channel/item/[contains(text()),'$txtSearch']"; 틀린 브래킷이 닫힙니다. 또한 당신은 당신이 다음 XPath를 사용할 수 있습니다 description 노드에 대해 당신이 검색 원하는 노드에 지정해야합니다 : $qry = "//channel/item[description[contains(text(),\"$txtSearch\")]]";

업데이트 : 확실히, 고든의 변형이 더 나은 : $qry = "//channel/item[contains(.,\"$txtSearch\")]";