使用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";  
    } 
+1

什么是你的问题?如果这是最有效的(*否*),或者在使用XML时如何做邻近搜索? – Gordon 2010-03-21 17:25:23

+0

如果这是最有效的(否)=>使用solr而不是一个好的候选人是最有效的解决方案。顺便说一句:避免使用solr :-)的PHP实现 – Karussell 2010-03-21 17:36:22

+0

好,因为您提出的效率问题是多余的我猜想你将如何使用XML和PHP进行邻近搜索(因为php是唯一允许使用的语言) – dbomb101 2010-03-21 17:46:42

正如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"; 
}