【问题标题】:Parse solr response in php and show them in a html table在 php 中解析 solr 响应并在 html 表中显示它们
【发布时间】:2012-07-24 12:56:25
【问题描述】:

所以我运行了许多 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。

提前感谢您的帮助。

【问题讨论】:

    标签: php html xml solr


    【解决方案1】:

    最简单的做法是将&amp;wt=php 添加到 Solr 请求 URL,然后运行 ​​eval() 并将结果分配给一个数组(假设您相信您的 Solr 服务器不会发回恶意代码)。然后 Solr 结果将只是在一个常规的 PHP 数组中,您可以根据需要对其进行操作。

    您也可以在末尾添加&amp;wt=json,以JSON 格式获取结果,然后在PHP 中对返回的字符串运行json_decode() 以将其转换为PHP 数组。

    【讨论】:

    • 甜蜜!谢谢你的回答。我知道应该有一个更简单的方法,但有时你不知道要搜索什么!我添加了&amp;wt=php,看到结果我很兴奋。我会玩一会儿……;)
    • 我建议也使用 JSON...避免那些讨厌的 eval 调用,尤其是从其他地方返回的数据(即使它是 solr 并且可能是安全的)。
    【解决方案2】:

    试试这个:

    <?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>
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复,感谢您提供有关如何创建表的详细信息。你能解释一下xpath = $solr_return-&gt;xpath( '//result/doc' ); 需要什么对象'$solr_return` 吗?我收到此错误:Fatal error: Call to a member function xpath() on a non-object
    • 检查$solr_return中的值。如果是 XML 字符串,则在其上执行 simplexml_load_string。我已经修改了我的回复以反映相同的内容。请再次检查。
    猜你喜欢
    • 2021-08-03
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多