PHP - 使用XMLWriter将数据库导出为XML时缺少标记

时间:2014-08-30 15:09:10

标签: php mysql xml xmlwriter

我正在使用XMLWriter尝试导出当前包含大约6700行的数据库。

从我所看到的,这样做应该相对简单,但在打印XML的过程中,它不会关闭元素,因此会产生错误。

$xml = new XMLWriter();

$xml->openURI("php://output");
$xml->startDocument('1.0', 'UTF-8');
$xml->setIndent(true);

$xml->startElement('doc');

while ($row = mysql_fetch_assoc($getResult)) {
  $xml->startElement("item");

  $xml->startElement("id");
    $xml->writeRaw($row['id']);
  $xml->endElement();

  $xml->startElement("type");
    $xml->writeRaw($row['type']);
  $xml->endElement();

  $xml->startElement("name");
    $xml->writeRaw($row['name']);
  $xml->endElement();

  $xml->endElement();
}

$xml->endElement();

$xml->flush();

在此过程中的某个时刻,我会在XML输出中看到类似的内容:

<type>exampleTypetype>

然后它将继续打印XML。

我仍然相对较新的PHP,所以我很感激能够了解这里可能发生的事情。

由于

1 个答案:

答案 0 :(得分:1)

您正在使用XMLWriter::writeRaw()并且当您这样做时,您需要自己处理正确的XML编码,因为这会按原样写入字节。

正如您的错误描述所示,您不会首先将这些原始字节正确编码为有效的XML。

如进一步显示,您并未意识到这一点。很可能是因为您希望XMLWriter扩展已经为您编码数据。

然后您可能正在寻找XMLWriter::text(),或者如果您需要将二进制数据编码到XML中base64_encode()