使用php搜索XML文档

使用php搜索XML文档,php,xml,dom,Php,Xml,Dom,我正在尝试使用DOM、PHP和XML的组合来创建一个搜索函数。我已经启动并运行了一些东西,但问题是我的搜索功能只接受确切的术语,除此之外,我想知道我选择的方法是否最有效 $searchTerm = "Lupe"; $doc = new DOMDocument(); foreach (file('musicInformation.xml')as $node) { $xmlString .= trim($node); } $doc->loadXML($xmlString); $records

我正在尝试使用DOM、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。找一个能帮你解决这个问题的图书馆

然而,我承认这并不总是一种选择。考虑到这一点

我觉得你说得有点过分了。首先,您应该使用加载文件的方法

然后,我可能会使用来选择要查找的节点,而不是自己执行搜索

您的代码最终会显示如下内容:

$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时如何进行邻近搜索?如果这是最有效的(否)=>请使用solr,以使一个好的候选者成为最有效的解决方案。顺便说一句:避免使用solr的php实现:-)既然你让效率问题变得多余了,我想我将如何使用XML和php进行近似搜索(因为php是我唯一允许使用的语言)这篇来自某位创始人的关于这个主题的好文章-