【发布时间】:2012-04-15 12:34:08
【问题描述】:
我有一个 XML 文档:
<items>
<item>
<id>1</id>
<title>Title ABC Defg</title>
<author>Author Name</author>
<description>Description text </description>
</item>
...
</items>
我想做一个搜索并检查标题、作者、描述是否包含短语
我不知道如何立即执行并按相关性排序。但这并不像搜索“Word”和“word”那么重要。我使用了php代码:
<?php
$xml=simplexml_load_file(file.xml);
$query=$_GET['query'];
$nodes= $xml->xpath("//item[contains(title,'$query')]");
$count = count($nodes);
for ($i=1;$i<=$count;$i++){
$nodes= $xml->xpath("//item[contains(title,'$query')][$i]");
foreach($nodes as $node) {
$title = $node->title;
$desc= $node->description;
$auth= $node->auth;
$id= $node->id;
echo "id: $id<br />title: $title<br />author: $auth<br />desc: $desc<p> </p>
?>
我知道它只搜索标题,但问题是当我搜索 Word 时,它找不到单词,我想同时获得:单词和单词
如果您还可以帮助我在作者标题和描述中“连接”搜索并以某种方式订购它,我真的很感激。
编辑:
我已经设法搜索所有标签(不仅指定,而且对我来说还可以)
所以我有这样的代码:
$query=strtolower(rawurldecode($_GET['s']));
$nodes= $xml->xpath("//item[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'$query')]") // . - all i suppose
我也使用 $query 的验证方式
【问题讨论】:
-
查看 stackoverflow.com/questions/3238989/… 以了解 PHP 中的伪不区分大小写查询
-
我强烈建议不要在 XPath 表达式框架中替换外部字符串——你可能很容易成为 XPath 注入的受害者。