使用php搜索XML文档
问题描述:
我想使用DOM,PHP和XML的组合进行搜索功能。我得到的东西和运行,但问题是,我的搜索功能将只接受精确的术语,在此之上,如果该方法我拿起想知道最有效的使用php搜索XML文档
$searchTerm = "Lupe";
$doc = new DOMDocument();
foreach (file('musicInformation.xml')as $node)
{
$xmlString .= trim($node);
}
$doc->loadXML($xmlString);
$records = $doc->documentElement->childNodes;
$records = $doc->getElementsByTagName("musicdetails");
foreach($records as $record)
{
$artistnames = $record->getElementsByTagName("artistname");
$artistname = $artistnames->item(0)->nodeValue;
$recordnames = $record->getElementsByTagName("recordname");
$recordname = $recordnames->item(0)->nodeValue;
$recordtypes = $record->getElementsByTagName("recrodtype");
$recordtype = $recordtypes->item(0)->nodeValue;
$formats = $record->getElementsByTagName("format");
$format = $formats->item(0)->nodeValue;
$prices = $record->getElementsByTagName("price");
$price = $prices->item(0)->nodeValue;
if($searchTerm == $artistname|| $searchTerm == $recordname || $searchTerm == $recordtype ||$searchTerm == $format || $searchTerm == $price)
{
echo "$artistname - $recordname - $recordtype - $format -$price\n";
}
答
正如Karussell说,最好的答案是这不是使用PHP。找一个可以帮你照顾的图书馆。
但是,我承认这并不总是一种选择。考虑到这一点......
我认为你比你需要更冗长一些。首先,您应该使用DOMDocument->load($file)方法来加载文件。
然后,我可能会使用XPath query选择您正在查找的节点,而不是自己执行搜索。
你的代码最终会看起来像这样:
$searchTerm = "text";
$doc = new DOMDocument();
$doc->load('musicInformation.xml');
$xpath = new DOMXPath($doc);
$result = $xpath->query(
'//musicdetails[ .//text()[contains(., "'. addslashes($searchTerm) .'")] ]'
);
echo "Found: ". $result->length ."\n";
foreach ($result AS $node) {
echo $doc->saveXML($node) ."\n\n";
}
什么是你的问题?如果这是最有效的(*否*),或者在使用XML时如何做邻近搜索? – Gordon 2010-03-21 17:25:23
如果这是最有效的(否)=>使用solr而不是一个好的候选人是最有效的解决方案。顺便说一句:避免使用solr :-)的PHP实现 – Karussell 2010-03-21 17:36:22
好,因为您提出的效率问题是多余的我猜想你将如何使用XML和PHP进行邻近搜索(因为php是唯一允许使用的语言) – dbomb101 2010-03-21 17:46:42