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

5

我希望在<code></code>标记内部显示缩进的XML,这与IT技术有关。我从javascript函数中获取XML:

new XMLSerializer()).serializeToString(newXMLDoc)

但是它给我带来了不便。其中一种方法是使用<ul><li> ,但是是否有更好的方法?

XSLT能否帮助我解决这个问题(对不起我不太了解XSLT)。如果可以,在哪里需要附加XSLT样式表,是在HTML文档中还是在我追加到<code></code>标记的xmlString中?

这只是一个客户端应用程序,我无法在服务器端执行任何操作。

更新:我还将xmlString中的<和>替换为&lt;&gt;,我仍然可以使用XSLT吗?

即使应用了Dimitre Novatchev提供的XSLT,我仍然没有得到缩进的文本,尽管我可以看到在使用SAXON解析器kernow时,XML被缩进了,但是当我在我的javascript代码中执行它时,我仍然得到相同没有缩进的代码。

    //var xslt contains the XSLT provided by Dimitre Novatchev as string
    //var XMLDoc is the XMLDocument object to be transformed
    xsltProcessor=new XSLTProcessor();
    xsltProcessor.importStylesheet(xsl);
    newXMLDoc = xsltProcessor.transformToDocument(xml,document);
    //This is how I am converting the transformed XML to string 
    return (new XMLSerializer()).serializeToString(newXMLDoc)
2个回答

6
我建议您使用服务器端代码来完成此操作,并向客户端发送HTML格式的XML。是的,XSLT可以帮助您。但是您应该在服务器上对XML进行 HTML编码
然而,请注意,如果您正在从文档中删除\n标记(换行字符)和其他空格字符(例如空格、制表符等),那么您需要搜索类似于客户端文档格式化程序或类似的东西。编写这样的工具从不是一件容易的事情。
还可以为XML使用语法突出显示器。一个很好的例子可以在这里找到。然后您只需使用:
<pre class='brush: xml;'>
   // XML goes here.
</pre>

这只是一个客户端应用程序,我没有任何服务器端代码,而且我已经在使用Google Code Prettify来美化XML,但它仅提供语法高亮。 - Bunny Rabbit
那么,请看一下这个问题:[链接](https://dev59.com/WXRC5IYBdhLWcg3wMeLg)。 - Saeed Neamati
什么是HTML编码XML?我需要将XSLT附加到XML文档中还是放在HTML的头部? - Bunny Rabbit
不好意思,那是针对服务器端的解决方案。 :) - Saeed Neamati
所以我现在只有两个问题 1)我还将xmlString中的<和>替换为<和>,我还能使用XSLT吗?2)我需要在哪里附加XSLT? - Bunny Rabbit

4
你可以分两步完成此操作:
第一步,只需使用 身份转换 并添加 <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实现。

这个建议的解决方案完美地运作了(感谢Dimitre),但是对于所有使用.NET的人,请检查此链接,因为默认情况下XmlWriter不会缩进您的xml,并且不会自动使用在xslt中指定的设置。 https://dev59.com/oFbUa4cB1Zd3GeqPDfao#5931224 - Sufyan Jabr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接