drupal之处理HTTP的返回结果

当我们的请求返回的结果代码是200时,我们知道 web 交流成功了。内容可能是我们想要的,也可能不是,但是我们有很好的理由相信取回 XML 文档时没有发生错误。

因此,在这种情况下,我们继续处理信息:

 

if ($http_result->code == 200) {
  // ... Processing response here...
  $doc = simplexml_load_string($http_result->data);
  if ($doc === false) {
    $msg = "Error parsing bookshelf XML for %url: %msg.";
    $vars = array('%url'=>$url, '%msg'=>$e->getMessage());
    watchdog('goodreads', $msg, $vars, WATCHDOG_WARNING);
    return t("Getting the bookshelf resulted in an error.");
  }
  return _goodreads_block_content($doc, $num_items);
  // Otherwise we don't have any data
 } else { // ... Error handling that we just looked at.

 

 在上面的例子中,我们使用了 PHP 5 的 SimpleXML 库。SimpleXML 提供了一套方便易用的工具,用来处理 XML 内容。在已经过气儿的 PHP 4 语言版本中没有这个库。

为了保持与以前的PHP版本兼容,Drupal 代码常常使用 Expat 解析器,一个相当老的基于事件的 XML 解析器,PHP发布的时候就支持这个库。Drupal甚至包扩了一个创建 Expat 解析器的包装函数。但是,编写事件处理函数是很费时的重复性劳动。SimpleXML 给了我们一个易用的接口,需要编写的代码少多了。

使用 Expat 基于事件的方法处理 XML 文档的例子,参见内建的 Aggregator 模块。使用 Expat 的详细文档参见 PHP 官方文档:http://php.net/manual/en/ref.xml.php.

我们将使用 simplexml_load_string() 来解析 XML。如果解析成功,这个函数返回一个 SimpleXML 对象。但是,如果解析失败,它返回 false。

在我们的代码中,检查了 false 的情况。如果发现了,我们记录一条错误并返回一条友好的错误信息。不过,如果 Goodreads XML 文档得到了正确解析,这个函数将调用我们模块中的另一个函数:_goodreads_block_content()。这个函数根据 XML 数据构造一些内容。

评论

发表新评论

此内容将保密,不会被其他人看见。
  • 允许HTML标签:<a> <img><em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><p>
  • 自动断行和分段。

更多关於格式化选项的信息

Image CAPTCHA
验证码
|