XSLT:选择性缩进是可能的吗?
我正在使用XSLT将XML转换为HTML。如果我在XSLT:选择性缩进是可能的吗?,xslt,indentation,pre,Xslt,Indentation,Pre,我正在使用XSLT将XML转换为HTML。如果我在中指定indent='no',则生成的HTML中的相邻标记将一起运行到一个长行中(它们之间布局的所有空白都被删除),这使得阅读和理解非常困难。但是,如果我指定“缩进-‘是’”,HTML会很好地缩进,但这会完全破坏 <?xml version='1.0'?> <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> <
中指定indent='no'
,则生成的HTML中的相邻标记将一起运行到一个长行中(它们之间布局的所有空白都被删除),这使得阅读和理解非常困难。但是,如果我指定“缩进-‘是’”,HTML会很好地缩进,但这会完全破坏
<?xml version='1.0'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="demo">
<html>
<head>
<title>Demo</title>
</head>
<body>
<h1>This is a demo</h1>
<hr/>
<xsl:apply-templates/>
<hr/>
</body>
</html>
</xsl:template>
<xsl:template match="foo">
<h2>This is foo</h2>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我将此样式表应用于此输入:
<pre> public static void main(String[] args) {<br /> <textarea cols='60' rows='10'></textarea><br /> }</pre>
一些HTML
<pre> public static void main(String[] args) {<br>
<textarea cols="60" rows="10"></textarea>
<br> }</pre>
这是
预格式化文本
不应该是
缩进
输出是这样的:没有缩进,但至少可读
<xsl:template match="pre//br">
<xsl:text> </xsl:text>
</xsl:template>
演示
这是一个演示
一些HTML
<pre> public static void main(String[] args) {<br>
<textarea cols="60" rows="10"></textarea>
<br> }</pre>
这是
预格式化文本
不应该是
缩进
我是福
我正在使用的实现是Java 1.8附带的任何东西。结果是原始XML在一行上有pre>
所有块,行之间用
分隔,而不是换行符。这意味着以下输入:
publicstaticvoidmain(字符串[]args){
产生了以下输出:
publicstaticvoidmain(String[]args){
}
解决方案是添加以下规则,用换行符替换
s:
很抱歉浪费了您的时间。原来,原始XML在一行中包含了pre>
所有块,行之间用
分隔,而不是换行符。这意味着以下输入:
publicstaticvoidmain(字符串[]args){
产生了以下输出:
publicstaticvoidmain(String[]args){
}
解决方案是添加以下规则,用换行符替换
s:
很抱歉浪费了您的时间。请发表一篇文章。这可能有助于我们准确解释您使用的XSLT版本、xsl:output方法和XSLT处理器。例如,在XSLT3中,您将看到xsl:output
具有suppress indentation
属性。另一方面,您会发现,例如methodhtml
中定义的序列化规则已经说明了,例如,“不能在格式化元素中添加或删除空格,格式化元素是pre、script、style、title和textarea”。请发布一个。这可能有助于我们准确解释哪个XSLT版本,使用哪个xsl:output
方法和哪个XSLT处理器。例如,在XSLT3中,您将看到xsl:output
具有suppress indentation
属性。另一方面,您会发现在方法html
的实例中定义的序列化规则已经说明了,例如,“不能在格式化元素中添加或删除空格,格式化元素是pre、script、style、title和textarea”。
<xsl:template match="pre//br">
<xsl:text> </xsl:text>
</xsl:template>