如何在HTML代码标记内显示缩进的XML

时间:2011-12-03 12:17:02

标签: html xml xslt indentation

我想在<code></code>内的html页面中显示缩进的XML 我从javascript函数

获取XML

new XMLSerializer()).serializeToString(newXMLDoc)

这给了我非预期的XML字符串。

我能想到的一种方法是使用<ul><li>

但是有更好的方法吗?

在这种情况下,XSLT可以帮助我(抱歉,我对XSLT了解不多。)如果是,我需要在html文档或{{1}中附加XSLT样式表。我将附加到xmlString标记。

它只是一个客户端应用程序我在服务器端无法做任何事情。

更新:我也在替换&lt;和&gt;在<code></code>&lt;的xmlString中,我仍然可以使用XSLT吗?

即使应用了Dimitre Novatchev给出的XSLT,我也没有得到缩进文本,虽然我可以看到XML在使用SAXON解析器kernow应用XSLT时缩进但是当我在我的javascript代码中执行它时我得到了同样没有缩进的代码。

&gt;

2 个答案:

答案 0 :(得分:5)

我建议您使用服务器端代码执行此操作,并将HTML格式的XML发送到您的客户端。是的,XSLT可以帮到你。但是你应该在服务器 HTML编码你的XML。

但是,请注意,如果要从文档中删除\n标记(换行符)和其他空格字符(如空格,制表符等),则需要搜索客户端文档格式化程序,或类似的东西。写这样的东西绝非易事。

此外,您可以对XML使用语法高亮显示。可以找到一个很好的例子here。然后你可以简单地使用:

<pre class='brush: xml;'>
   // XML goes here.
</pre>

答案 1 :(得分:1)

您可以分两步完成此操作:

首先,只需使用identity transformation<xsl:output indent="yes"/>指令处理XML文档

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:template match="node()|@*">
      <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

在任何XML文档上应用此转换时(例如此文件):

<root><node/></root>

大多数XSLT处理器(.NET XslCompiledTransform,Saxon 6.5.4和Saxon 9.0.0.2,AltovaXML)产生想要的结果

<root>
  <node />
</root>

第二步步骤是对结果执行字符串替换操作,以便用<字符串替换任何&lt;字符。

如果您想要一个更高级的显示器,请查看XPath Visualizer如何使用XSLT