Flask 为什么浏览器会忽略XML标记?

Flask 为什么浏览器会忽略XML标记?,flask,lxml,python-3.6,Flask,Lxml,Python 3.6,(更好的标题,有人吗?)使用Python3.6中的小烧瓶应用程序呈现一些用lxml.builder生成的XML。模块mkX中的函数makeXML构建并返回XML,如下所示: from lxml import etree as ET ... def makeXML(): ... # myxml is type <class 'lxml.etree._Element'> f = ET.tostring(myxml, method='xml', xml_declar

(更好的标题,有人吗?)使用Python3.6中的小烧瓶应用程序呈现一些用
lxml.builder
生成的XML。模块
mkX
中的函数
makeXML
构建并返回XML,如下所示:

from lxml import etree as ET
...
def makeXML():
    ...
    # myxml is type <class 'lxml.etree._Element'>
    f = ET.tostring(myxml, method='xml', xml_declaration=True, encoding='utf-8', pretty_print=True)
    return f
当我在Chrome或Firefox中转到
[myurl]/getXML
时,我看到:

eggs bacon sausage spam
<?xml version='1.0' encoding='utf-8'?>
<someXML>
  <reclist>
    <dat>eggs</dat>
    <dat>bacon</dat>
    <dat>sausage</dat>
    <dat>spam</dat>
  </reclist>
</someXML>
它省略了XML标记。为什么会这样?点击查看源代码,我看到以下内容:

eggs bacon sausage spam
<?xml version='1.0' encoding='utf-8'?>
<someXML>
  <reclist>
    <dat>eggs</dat>
    <dat>bacon</dat>
    <dat>sausage</dat>
    <dat>spam</dat>
  </reclist>
</someXML>
例如,在查看其他返回XML的Web服务时,浏览器不会忽略XML标记


这是否意味着myxml不是有效的XML?如果是这样,有什么区别&我应该如何解决

浏览器呈现HTML,而不是XML。大多数浏览器都试图显示文档中可能的内容。在本例中,它们显示所有文本节点,但不显示在HTML中没有意义的XML元素

检查HTTP响应是否包含一行语句

Content-Type: application/xml
只有设置了此选项,浏览器才能决定显示XML文档


正如您在打开源代码视图时所看到的,XML是完整的。每件事都按它应该做的那样工作。

浏览器呈现HTML,而不是XML。大多数浏览器都试图显示文档中可能的内容。在本例中,它们显示所有文本节点,但不显示在HTML中没有意义的XML元素

检查HTTP响应是否包含一行语句

Content-Type: application/xml
只有设置了此选项,浏览器才能决定显示XML文档


正如您在打开源代码视图时所看到的,XML是完整的。一切都按预期进行。

为了完整起见,除了Lutz Horn的答案外,下面是如何设置烧瓶以返回特定的模拟类型:

...
from flask import Response
...
def getXML():
    xml = mkX.makeXML()    
    return Response(xml, mimetype='application/xml')

由于xml是记录而不是文本,“application/xml”比“text/xml”更可取,更多信息

为了完整起见,除了Lutz Horn的答案外,以下是如何设置烧瓶以返回特定的模拟类型:

...
from flask import Response
...
def getXML():
    xml = mkX.makeXML()    
    return Response(xml, mimetype='application/xml')
由于xml是记录而不是文本,“application/xml”比“text/xml”更可取,更多信息