我正在尝试使用带有表单值的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是从表单中获取的文本值。任何人都可以解决这些错误吗?
答案 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\")]";