通过CURL从API返回的xml表格式

时间:2013-04-17 22:04:34

标签: php xml curl html-table

我正在使用其他公司的API从他们的数据库中检索信息,它以XML格式返回给我。我正在努力完成两件事 - 但我遇到了一些问题。

第一我想将原始XML数据格式化为表格格式,通过浏览器更容易查看。

第二我收到的数据是ID /用户名/密码/电子邮件。我希望能够将该数据导入我的数据库,以便每个userID都是插入数据库的行(我可以做数据库工作,我只是无法弄清楚如何单独处理每个用户)

API格式就像这个<API> <message> <user> <id> </id> <login> </login> <password> </password> <message> </message> </API>一样,只有数百个用户而不是一个用户。

每当我只打印$ array时,我就会按照预期将数据作为一个大blob。但是,当我使用更新的代码时,(下面)我收到一个错误,即用户不是有效的索引。我也收到了看起来像我桌子的开头,没有任何数据(只有边框)。

如果有人可以帮我弄清楚为什么桌子没有接收数据(或者给我一些更好的方法来做建议)我会非常感激。

任何可以帮助我找出第二名的人的额外积分。

错误是Notice: Undefined index: user in /home/public_html/new/test.php on line 36 第36行在代码中被注释

以下是我的代码的底部部分:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Method execution
$result = curl_exec($ch);
// Close CURL session

$array = json_decode(json_encode((array)simplexml_load_string($result)),1);

$array_user=$array['user']; //line 36

$tab='<table border="1" width="400">';
for ($j=1; $j< count($array_user) ; $j++) {

  $tab.='<tr>';
  $tab.='<td>'.$array_user[$j]['id'].'</td>';
  $tab.='<td>'.$array_user[$j]['login'].'</td>';
  $tab.='<td>'.$array_user[$j]['mail'].'</td>';
 $tab.='<td>'.$array_user[$j]['date'].'</td>';
 $tab.='</tr>';
}

$tab.='</table>';

echo $tab;


?>

2 个答案:

答案 0 :(得分:0)

这是使用simplexml循环XML的方法。
您可以从中构建表或查询。

$xml = simplexml_load_string($x); // XML is in $x

foreach ($xml->user as $user) {

    echo $user->id . ': ' . $user->login . ' : '
    echo $user->password . ' : ' . $user->message . '<br />;
}

看到它有效:http://codepad.viper-7.com/KhWsla

BTW:你的xml需要修复:

<API>
    <user>
        <id>1</id>
        <login>michi</login>
        <password>12345</password>
        <message>hi!</message>
    </user>
</API>

答案 1 :(得分:0)

$sxe = simplexml_load_string('<API><message><user><id>10</id><login>a</login><password>abc</password></user><user><id>11</id><login>456</login><password>def</password></user></message></API>');

// or $sxe = simplexml_load_file($xml_url);

function tabulate(SimpleXMLElement $sxe) {
    if (!count($sxe)) return '';
    $table = "<table border='1' width='400'>\n";
    $header = false;
    foreach($sxe as $row) {
        if (!$header) {
            $table .= "<thead>\n<tr>\n\t";
            foreach ($row as $field) {
                $table .= "<th>";
                $table .= htmlspecialchars($field->getName(), ENT_NOQUOTES, 'UTF-8');
                $table .= "</th>";
            }
            $table .= "\n</tr>\n</thead>\n<tbody>\n";
            $header = true;
        }
        $table .= "<tr>\n\t";
        foreach ($row as $field) {
            $table .= "<td>";
            $table .= htmlspecialchars((string) $field, ENT_NOQUOTES, 'UTF-8');
            $table .= "</td>";
        }
        $table .= "\n</tr>\n";

    }
    $table .= "</tbody>\n</table>";
    return $table;
}


function insert_users(PDO $db, SimpleXMLElement $users) {
    $ins = $db->prepare('INSERT INTO users (id, login, password) VALUES (?,?,?)');
    foreach ($users as $user) {
        $userdata = array((string) $user->id, (string) $user->login, (string) $user->password);
        $ins->execute($userdata);
    }
}

insert_users($db, $sxe->message->user);

echo tabulate($sxe->message->user);

SimpleXMLElement cheat sheet