我正在使用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,所以我很感激能够了解这里可能发生的事情。
由于
答案 0 :(得分:1)
您正在使用XMLWriter::writeRaw()
并且当您这样做时,您需要自己处理正确的XML编码,因为这会按原样写入字节。
正如您的错误描述所示,您不会首先将这些原始字节正确编码为有效的XML。
如进一步显示,您并未意识到这一点。很可能是因为您希望XMLWriter扩展已经为您编码数据。
然后您可能正在寻找XMLWriter::text()
,或者如果您需要将二进制数据编码到XML中base64_encode()
。