2010-03-21 47 views
3

我想使用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

回答

2

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