2010-03-21 2 views
3

Я пытаюсь выполнить функцию поиска, используя комбинацию DOM, PHP и XML. Я получил что-то и работает, но проблема в том, что моя функция поиска будет принимать только точные сроки, на вершине этого интересно, если метод, который я выбрал наиболее эффективныйпоиск XML-документов с использованием php

$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

Что ваш вопрос? Если это наиболее эффективный (* no *) или как сделать поиск близости при использовании XML? – Gordon

+0

, если это наиболее эффективный (нет) => использовать solr вместо того, чтобы хороший кандидат был самым эффективным решением. BTW: избегайте использования php-реализации solr :-) – Karussell

+0

ну, так как вы сделали вопрос с избыточностью эффективности, я предполагаю, что я собираюсь, как вы выполняете поиск по близости с использованием XML и PHP (поскольку php является единственным языком, который разрешен использовать) – dbomb101

ответ

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"; 
} 
Смежные вопросы