我有一个数据库表与图书的详细信息,并希望用户搜索它。但是,我被告知可以将页面加载的所有数据读取到XML中,并允许在XML上执行搜索,而不是重复往返于数据库。我的问题是,这是可能的吗?
我的表结构是这样的:
===============================================================
| id | name | pages | category | date | publisher |
===============================================================以前有没有人做过这样的事情?
任何建议都将不胜感激。
发布于 2011-08-31 23:43:23
如果您正在寻找客户端解决方案,XSLT可能会满足您的需求。
发布于 2011-09-01 00:14:29
这只是一个例子--伪代码--你必须测试并重建它
您必须从表中创建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)
{
////////////////
}
}发布于 2011-09-01 00:15:04
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]https://stackoverflow.com/questions/7259588
复制相似问题