我想在<code></code>
内的html页面中显示缩进的XML
我从javascript函数
new XMLSerializer()).serializeToString(newXMLDoc)
这给了我非预期的XML字符串。
我能想到的一种方法是使用<ul>
和<li>
但是有更好的方法吗?
在这种情况下,XSLT可以帮助我(抱歉,我对XSLT
了解不多。)如果是,我需要在html文档或{{1}中附加XSLT样式表。我将附加到xmlString
标记。
它只是一个客户端应用程序我在服务器端无法做任何事情。
更新:我也在替换&lt;和&gt;在<code></code>
和<
的xmlString中,我仍然可以使用XSLT吗?
即使应用了Dimitre Novatchev给出的XSLT,我也没有得到缩进文本,虽然我可以看到XML在使用SAXON解析器kernow应用XSLT时缩进但是当我在我的javascript代码中执行它时我得到了同样没有缩进的代码。
>
答案 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>
第二步步骤是对结果执行字符串替换操作,以便用<
字符串替换任何<
字符。
如果您想要一个更高级的显示器,请查看XPath Visualizer如何使用XSLT 。