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

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

2nd我收到的数据是ID /用户名/密码/电子邮件。 我希望能够将数据导入到数据库中,以便每个用户标识都是插入数据库的一行(我可以完成数据库工作,只是无法弄清楚如何分别处理每个用户)

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 行的 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;


?>

===============>>#1 票数: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

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

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

===============>>#2 票数: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备忘单

  ask by Robert Dickey translate from so

未解决问题?本站智能推荐: