将数据库读入XML并进行搜索

时间:2011-08-31 15:39:40

标签: php javascript xml

我有一个包含图书详细信息的数据库表,希望用户可以搜索它。但是,有人告诉我,我可以将页面加载的所有数据读入XML,并允许在XML上执行搜索,而不是重复往返数据库。我的问题是,这有可能吗?

我的表结构是这样的:

===============================================================
|  id    | name     | pages  |  category  | date | publisher  |
===============================================================

以前有人做过这类事吗?

任何建议都将不胜感激。

4 个答案:

答案 0 :(得分:0)

如果您寻找客户端解决方案,

XSLT可能会满足您的需求。

<强> Check the demo

答案 1 :(得分:0)

这只是一个例子 - 假代码 - 你必须测试并重建这个

您必须从表中创建xml文件。

$dom = new DOMDocument('1.0', 'utf-8');

    function arr2xml($arr, $el=null)
        {
                    global $dom;  
            foreach ($arr as $key=>$val){           
                $tag_el=$dom->createElement((is_numeric($key) ? 'row' : $key));
                (is_array($val) ? arr2xml($val, $tag_el) : $tag_el->appendChild($dom->createCDATASection($val)));
                (empty($el)) ? $dom->appendChild($tag_el) : $el->appendChild($tag_el);
            }
        }

$result = mysql_query('select * from your table', $mysql_link);
$arr = array();
if ($result !== FALSS && mysql_num_rows($result))
{
  while($row = mysql_fetch_array($result))
   $arr[] = $row;
}
arr2xml($arr);
file_put_contents('tablexml.xml', $dom->saveXml());

///// FOR SEARCH BY category

$dom = new DOMDocument;
$dom->loadXML(file_get_contents('tablexml.xml'));
$xpath = new DOMXPath($dom);
$res = $xpath->query('//row[cotanins(category, $search_value)]');
if ($res->length)
{
 foreach ($res as $el)
 {
   ////////////////
 }
}

答案 2 :(得分:0)

xpath是您用来进行实际搜索的内容。这是query language for XML

假设xml中的数据库文件类似于以下内容:

<database>
    <book>
       <id>000000</id>
       <name>A Book</name>
       <pages>23</pages>
       <category>Tech</category>
       <date>2011-08-31</date>
       <publisher>Publisher</publisher>
    </book>
    ...
</database>

搜索超过20页的图书的xpath查询

//book[pages > 20]

答案 3 :(得分:0)

您似乎建议将整个数据库表转储到XML文件中,确保可以完成,但不会使您的搜索更快。为了加速数据库查询,通常会对查询中使用的数据字段使用索引。

另一种技术(也由DrColossos的评论建议),如果您的搜索是文本密集型的​​ - 可能在标题(名称?)字段中,那么您可以使用全文搜索引擎(例如Solr或Sphinx)与数据库引擎结合使用。这将为您提供文本字段中的每个单词索引,从而允许更快,更高级的搜索。

问候。