0

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

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

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

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

每当我只打印 $array 时,我都会按预期将数据作为一个大块来获取。但是,当我使用更新后的代码时,(如下)我收到一个错误,即用户不是有效索引。我还收到了看起来是我的表格的开头的东西,其中没有任何数据(只有边框)。

如果有人能帮我弄清楚为什么表没有接收数据(或者给我建议更好的方法),我将不胜感激。

任何可以帮助我找出第二名的人都可以加分。

错误是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;


?>
4

2 回答 2

0

这就是您使用simplexml.
您可以从中构建表或查询。

$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

顺便说一句:您的 xml 需要修复:

<API>
    <user>
        <id>1</id>
        <login>michi</login>
        <password>12345</password>
        <message>hi!</message>
    </user>
</API>
于 2013-04-17T22:26:22.760 回答
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备忘单

于 2013-04-17T23:03:16.023 回答