【问题标题】:While parsing xml/json, skip page if error message received解析 xml/json 时,如果收到错误消息则跳过页面
【发布时间】:2012-09-14 17:16:24
【问题描述】:

我有以下问题。我正在解析一个包含多个页面的 xml 提要,并且无法了解它们有多少(我在 xml url 中设置了一个变量,因此对于每个变量都有随机数量的页面)。我只知道这个数字不能超过 50。现在我有一个脚本,可以自动增加从 1 到 50 的页码变量。

假设该链接共有 26 页。使用我的脚本,我将继续发送请求,直到脚本到达第 50 页。然后它会更改第一个变量并从 1 重新开始到 50。对于第一个链接,从第 27 页开始,xml 将返回以下内容:

<response>
    <status>error</status>
    <code>400</code>
    <message>Incorrect Request Headers</message>
</response>

当 scipt 收到此消息时,如何停止自动增量并通过更改第一个变量并从 1 重新开始来继续?现在的代码是:

$query = "SELECT * FROM table_name ORDER BY id ASC";
$result = mysql_query($query) or die(mysql_error()); 
while ($row = mysql_fetch_array($result)) {
    if($row['row_name'] == '') {
        $variable1 = 0;
    }
    else {
        $variable1 = $row['row_name'];
    }

$page = 0;
    do {
        $page++;
        $result = apiCall('option1', 'option2', array('option3' => $variable1, 'page' => $page));
        usleep(1000);
        $res = json_decode($result);
            foreach ($res->node1->node2 as $item) {

            //define variable for insertion in MySQL

            $sql1 to insert the variables
            if (!mysql_query($sql1,$con1))
            {
                die('Error: ' . mysql_error());
            }
        }
    }
    while ($page<=50);
}

在上面的代码中,只有$variable1$page 是变量。所有选项(1、2 和 3)都是预定义的并且保持不变。 IE。当脚本收到错误消息时,我需要从 1 重新开始,下一个值为 $variable1

【问题讨论】:

  • apiCall 是做什么的?看起来它正在获取网页?更具体地说,$result 中有什么?完整的 XML?还有什么?
  • 它是 json 格式的完整提要。如果页面为假,即其中没有数据,则输出将如开头所述:状态:“错误”。如果有数据状态等于成功。我玩过 php break 但没有结果。
  • Break 是处理这个问题的好方法。 . .让我们看看你在休息时的代码?您应该能够在执行 json_decode 之前检查 $result,如果它为空,则 break 。 . .
  • 只是要清楚 - 没有空白页。如果没有我需要的数据(即 中的内容,您将看到如上所述的错误消息。例如,不是 500 错误。

标签: php xml json


【解决方案1】:

好的。这是我玩过的代码:

$query = "SELECT * FROM table_name ORDER BY id ASC";
$result = mysql_query($query) or die(mysql_error()); 
while ($row = mysql_fetch_array($result)) {
    if($row['row_name'] == '') {
        $variable1 = 0;
    }
    else {
        $variable1 = $row['row_name'];
    }

$page = 1;
    do {
        $result = apiCall('option1', 'option2', array('option3' => $variable1, 'page' => $page));
        usleep(1000);
        $res = json_decode($result);
    if ($res->status == 'error') {
            break 2;
        }
            foreach ($res->node1->node2 as $item) {

            //define variable for insertion in MySQL

            $sql1 to insert the variables
            if (!mysql_query($sql1,$con1))
            {
                die('Error: ' . mysql_error());
            }
        }
        $page++;
    }
    while (0);
}

问题在于它会在某个时候停止脚本执行。不明白为什么。

【讨论】:

  • 操作。错误代码中有我的错误。因此,上面的代码与 if () 中的正确语句一起使用,即 break 2;完成这项工作。
猜你喜欢
  • 2011-08-29
  • 2018-02-18
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2011-07-05
  • 2022-01-05
  • 2011-09-29
相关资源
最近更新 更多