所以我正在尝试使用symfony创建一个xml文档。生成没有问题,我以下列方式返回带有名为sitemap.xml.twig
的树枝模板的文档:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for slug in slugArray %}
<url>
<loc>{{ slug }}</loc>
<lastmod>{{ curDate }}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
{% endfor %}
</urlset>
在控制器中,我用:
调用模板 $response = new Response($this->render(
'MyBundle:Sitemap:sitemap.xml.twig',
[
'slugArray' => $slugArray,
'curDate' => $curDate
]
));
$response->headers->set('Content-Type', 'application/xml; charset=utf-8');
return $response;
$slugArray
包含大约1000个有效的链接,而$curDate
包含date('Y-m-d', time())
的值。
但是,当我尝试访问站点地图时,出现以下错误:
XML-Verarbeitungsfehler: nicht wohlgeformt
Adresse: http://localhost:8888/myWebsite/sitemap.xml
Zeile Nr. 1, Spalte 5:
HTTP/1.0 200 OK
----^
这基本上意味着xml文档格式不正确。
因此,出于某种原因,在解析xml时会考虑标头,从而产生错误。 xml本身是完全有效的,当我从firefox中的dev工具复制响应时,保留标题并使用在线验证器检查它们,我没有得到任何错误。
当我删除$response->headers->set('Content-Type', 'application/xml; charset=utf-8');
时,我会得到简单的HTML。
那么如何创建一个可以被浏览器解析而没有问题的xml响应呢?
答案 0 :(得分:0)
如果您使用twig生成xml内容,则在控制器中您已获得响应。 在你的控制器中:
$response = $this->render('....:sitemap.xml.twig', array('urls'=>$urls));
// at this stage $xml is an HttpFoudation Response Object;
// simply set de content type
$response->headers->set('Content-Type', 'xml');
$response->setCharset('utf-8');
return $response;