2010-03-21 6 views
3

J'essaie de faire une fonction de recherche en utilisant la combinaison de DOM, PHP et XML. Je suis quelque chose et en cours d'exécution, mais le problème est que ma fonction de recherche accepte uniquement les termes exacts, au-dessus de cette me demande si la méthode que je choisi le plus efficacerecherche de documents XML en utilisant 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

Quelle est votre question? Si c'est le plus efficace (* non *) ou comment faire une recherche de proximité lors de l'utilisation de XML? – Gordon

+0

si c'est le plus efficace (non) => utilisez plutôt solr pour qu'un bon candidat soit la solution la plus efficace. BTW: évitez d'utiliser l'implémentation php de solr :-) – Karussell

+0

bien puisque vous avez fait redondance question d'efficacité je suppose que je vais avec comment faire une recherche de proximité en utilisant XML et PHP (puisque php est la seule langue que je suis autorisé à utiliser) – dbomb101

Répondre

2

Comme l'a dit Karussell, la meilleure réponse est de n'utilisez pas PHP pour ça. Trouver une bibliothèque qui peut prendre soin de cela pour vous.

Cependant, je reconnais que ce n'est pas toujours une option. Dans cet esprit ...

Je pense que vous êtes un peu plus prolixe que vous ne le souhaitez. Tout d'abord, vous devez utiliser la méthode DOMDocument->load($file) pour charger le fichier. Puis, j'utiliserais probablement un XPath query pour sélectionner les nœuds que vous recherchez au lieu d'effectuer la recherche vous-même.

Votre code finirait recherche quelque chose comme ceci:

$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"; 
} 
Questions connexes