2012-07-26 51 views
4

因此,我有很多solr實例正在運行並提交搜索,我只是將一個快速網站放在一起。我提出請求的URL後,在PHP我用下面從Solr的獲取XML響應回:在PHP中解析solr響應並將它們顯示在html表中

$solr_return= file_get_contents($full_request_URL); 

現在的反應不是簡單的XML格式,它SOLR的煩躁吧,如果你知道我的意思是。我希望能夠解析返回的XML並將它們顯示在HTML表格中的行中。

我一直在網上看,有很多不同的想法,讓我覺得也許我完全關閉,這是不是做到這一點。如果你是我,你會怎麼做?

$solr_return的XML看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 

<lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">95</int> 
    <lst name="params"> 
    <str name="indent">true</str> 
    <str name="rows">10</str> 
    <str name="start">0</str> 
    <str name="q">*:*</str> 
    <str name="shards">some shards here</str> 
    </lst> 
</lst> 
<result name="response" numFound="2403043" start="0"> 
    <doc> 
    <str name="1">test1</str> 
    <str name="2">test2</str> 
    <str name="3">test3</str> 
    </doc> 
    <doc> 
    <str name="1">test1</str> 
    <str name="2">test2</str> 
    <str name="3">test3</str> 
    </doc> 
</result> 
</response> 

對於這個例子,我想說明一個表的1,2,3兩行測試1,Test2和TEST3的三列。

感謝您提前給予幫助。

回答

5

最簡單的做法是將&wt=php添加到Solr請求URL,然後運行eval()並將結果分配給數組(假定您信任您的Solr服務器不發送惡意代碼)。然後,Solr結果將只是一個普通的PHP數組,您可以根據需要操作它。

或者,您可以在最後添加&wt=json,以JSON格式獲取結果,然後在PHP中返回的字符串上運行json_decode()將其轉換爲PHP數組。

+0

甜蜜!謝謝你的回答。我知道應該有一個更簡單的方法,但有時你不知道要搜索什麼!我加了'&wt = php',我很興奮看到結果。我打算享受它一段時間...;) – 2012-07-26 17:18:40

+0

我建議使用JSON以及...避免那些討厭的'eval'調用,特別是從其他地方回來的數據(即使它是solr和大概安全)。 – Madbreaks 2012-07-26 17:46:18

0

試試這個:

<?php 
$solr_return = file_get_contents($full_request_URL); 
$solr_return = simplexml_load_string($solr_return); 
$xpath = $solr_return->xpath('//result/doc'); 

$rowCols = array(); 
if(count($xpath) > 0) { 
    foreach($xpath as $key => $value) { 
     if(!isset ($rowCols[ $key ])) { 
      $rowCols[ $key ] = '<tr>'; 
     } 

     foreach($value as $k => $v) { 
      $rowCols[ $key ] .= '<td>' . $v . '</td>'; 
     } 

     $rowCols[ $key ] .= '</tr>'; 
    } 
}  else { 
    $rowCols[] = '<tr><td colspan="3"></td></tr>' 
    } 
$rowCols = implode('', $rowCols); 
?> 
<html> 
<head></head> 
<body> 
<table border="0" width="50%" cellpadding="2" cellspacing-="3"> 
<tbody> 
<?php echo $rowCols;?> 
</tbody> 
</table> 
</body> 
</html> 

希望這有助於。

+0

謝謝您的回覆,並感謝您提供有關如何創建表格的詳細信息。你能解釋一下'xpath = $ solr_return-> xpath('// result/doc')這行嗎? '$ solr_return'需要什麼對象?我得到這個錯誤:'致命的錯誤:調用一個非對象的成員函數xpath()' – 2012-07-26 17:14:10

+0

檢查'$ solr_return'中的值。如果它是一個XML字符串,則對其執行'simplexml_load_string'。我修改了我的回覆以反映相同。請再檢查一次。 – 2012-07-27 03:15:30

相關問題