1

我正在处理一个相对广泛但不是巨大的 XML 文件,该文件是使用控制器从 Magento 中的自定义模块交付的。一切进展顺利,我已经能够让它工作并毫无问题地添加节点。浏览器(在本例中为 Chrome)一直在很好地呈现 XML 文档并按预期对其进行样式化。为了通过 Magento 正确显示 XML 标头,我使用以下代码:

/* Set display to render output as an XML document */
$this->loadLayout(false);
$this->getResponse()->setHeader('Content-Type','text/xml');
echo "<Magento >";
.
.
.
echo "</Magento>\n";
$this->renderLayout();

当输出达到 140 个节点时,它会停止呈现为格式化的 XML,并且只显示数据,就好像它正在呈现为 HTML 一样,并且不知道节点定义。例子:

渲染不正确

如果我注释掉一个节点所以有 139 它将正确呈现。如果我将完整的 140 多个节点 XML 页面保存为一个文件,然后将该文件放入 Chrome,它会正确呈现。例如:

正确渲染

如果我通过验证器运行 140+ 个节点的 XML 文件,它会作为有效的 XML 代码通过。如果我使用 Firefox 来查看页面,我也会得到相同的渲染显示损坏结果。

这个问题。通过 Magento 控制器传递 XML 文件的大小是否有限制?如果是这样,我可以将此限制重置为超过 139 个节点,以便正确呈现吗?相反,我是否应该担心浏览器是否正确呈现页面,因为它将被不同的程序而不是浏览器使用?

4

2 回答 2

4

用 . 检查您的标题curl。我猜它没有被设置。

curl -I http://example.com

尝试直接设置标题

header('Content-Type: text/xml');

在响应对象上设置标头只会影响通过响应对象传递的内容。由于您echo直接编写代码,因此响应对象永远不会有机会发送其标头。

Chrome 和 Firefox 都有一组试探法,试图猜测应该如何呈现文档。即使有一个text/html标题,一个简短的 XML 文档也可能被检测为 XML,从而触发 XML 呈现。一旦它达到一定的长度,浏览器就会猜测它是一个 HTML 文档,然后 HTML 呈现引擎接管。

确保正确设置标题应该可以解决问题。

于 2012-09-28T17:46:44.897 回答
0

通常,当您中断标签(而不是关闭它)或插入不支持的字符时,就会发生此问题。XML 的大小限制未知,也许您的浏览器验证崩溃了。

于 2012-09-28T14:36:04.737 回答