用php搜索xpath

时间:2012-03-21 10:06:45

标签: php xml search xpath

我正在尝试使用带有表单值的XPATH搜索XML文档,但我遇到了一些错误。

  

警告:SimpleXMLElement :: xpath()[simplexmlelement.xpath]:无效   在第17行表达

     

警告:SimpleXMLElement :: xpath()   [simplexmlelement.xpath]:xmlXPathEval:第17行的评估失败

     

警告:第21行为foreach()提供的参数无效

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 个答案:

答案 0 :(得分:2)

更改此行

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

到这个

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

然后它应该工作。

请注意,当您使用'channel'时,查询是相对于您调用xpath方法的SimpleXMLElement。如果要从根节点启动,请使用'/channel'。如果要搜索文档中的任何位置,请使用'//channel'

另请查看此XPath tutorial

答案 1 :(得分:2)

此行中有错误$qry = "channel/item/[contains(text()),'$txtSearch']"; 支架关闭错误。您还应指定要在哪个节点中搜索,对于description节点,您可以使用以下xpath: $qry = "//channel/item[description[contains(text(),\"$txtSearch\")]]";

更新: 当然,戈登的变体更好:$qry = "//channel/item[contains(.,\"$txtSearch\")]";