我正在使用其他公司的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;
?>
答案 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);