所以我有很多solr实例在运行,为了提交搜索,我只需要把一个快速的网站放在一起。在我创建请求URL后,在php中,我使用以下内容从solr获取XML响应:
$solr_return= file_get_contents($full_request_URL);
现在响应不是一个简单的xml格式,如果你知道我的意思的话,它有解决方案。我希望能够解析返回的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,以及两行test1、test2和test3。
感谢您提前提供的帮助。
最简单的方法是将&wt=php
添加到Solr请求URL,然后运行eval()
并将结果分配给数组(假设您信任Solr服务器不会发回恶意代码)。然后Solr结果将只是在一个常规的PHP数组中,您可以根据需要对其进行操作。
或者,您可以在末尾添加&wt=json
,以JSON格式获得结果,然后在PHP中对返回的字符串运行json_decode()
,将其转换为PHP数组。
试试这个:
<?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>
希望这能有所帮助。