DIV中的XML渲染

时间:2015-03-17 13:40:57

标签: html xml django formatting

在崩溃统计网站上工作时,我遇到了以下情况。

我有一个Django安装作为我们的崩溃统计网站运行,它服务器动态网页,我需要它显示(以及其他信息)我们的应用程序的用户上传的崩溃日志之一。这些日志采用XML格式,大致形成如下:

<?xml ... ?>
<?xml-stylesheet type="text/xsl" ... ?>
...
<RunTimeLog>
   <xsl:stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="xsl:stylesheet"/>
   <xsl:template match="/RunTimeLog">
      <html>
         <head>
            <style type="text/css">
               ... some styling code ...
            </style>
            <script language="javascript">
               ... some dynamics code ...
            </script>
         </head>
         <body>
            ... some HTML, XSL and JS for the page layout ...
         </body>
      </html>
   </xsl:template>
   </xsl:stylesheet>
   <LogHeader>
      ...
   </LogHeader>
   <LogEvents>
      ...
   </LogEvents>
</RunTimeLog>

现在,正如您所看到的,这包括在一个文件中呈现日志文件所需的所有内容(因为我们希望日志易于分发和读取)。此代码作为魅力,当在浏览器中打开XML时,会出现格式正确的日志。现在我尝试使用以下Django模板在不同的页面中呈现它:

<html>
   <head>
      ... import JQuery and other awesome stuff ...
   </head>
   <body>
      <div id="log">
      </div>
      <div id="logbuffer">
         {{ log }} <!-- Django inserts the raw XML in here... -->
      </div>
      <script>
         xsltProcessor = new XSLTProcessor();
         resultDocument = xsltProcessor.transformToFragment($('#logbuffer').innerHTML, document);
         $('log').append(resultDocument);
      </script>
   </body>
</html>

现在,这不起作用... logbuffer div确实按预期显示原始XML,但格式化不起作用,脚本中的第二行将 null 返回到 resultDocument

我想知道这是正确的做法吗?有谁知道为什么这不起作用?我知道在Django方面有不同的解决方法,但我宁愿保留格式化客户端。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

{{ log }}会插入转义 html,而不是原始HTML。所以$('#logbuffer').innerHTML会返回

&lt;?xml ... ?&gt;
&lt;?xml-stylesheet type=&quot;text/xsl&quot; ... ?&gt;
and so on...

您必须将log变量标记为安全:

{{ log|safe }}