如何移除XSL标签转换后在VB文件中遗留的空行?
解决XSL转VB文件时多余空行的问题
1. 清理模板里的“野生”空白
XSL模板里标签外的换行、缩进,比如<xsl:if>前后的回车,哪怕加了xsl:strip-space也没用——因为strip-space只处理元素内部的空白文本节点,模板里直接写的换行属于顶层文本节点,会被原样输出。
比如你写:
<xsl:if test="condition"> ' 这是VB代码 </xsl:if>
这里<xsl:if>标签上下的换行和缩进就会变成空行。解决办法要么把代码和标签挤在一起:
<xsl:if test="condition">' 这是VB代码</xsl:if>
要么用<xsl:text>精准控制输出内容和换行:
<xsl:if test="condition"> <xsl:text>' 这是VB代码 </xsl:text> </xsl:if>
是换行符,只在你需要换行的地方加,别让多余的空白混进来。
2. 全局禁用空白保留
在XSL的根元素里加上xml:space="default",再配合xsl:strip-space elements="*",把所有元素内的空白都清掉:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xml:space="default"> <xsl:strip-space elements="*"/> <xsl:output method="text" encoding="utf-8"/> <!-- 你的模板代码 --> </xsl:stylesheet>
3. 给<xsl:choose>这类分支“瘦身”
<xsl:choose>、<xsl:when>这些标签的缩进和换行也会产生空行,比如:
<xsl:choose> <xsl:when test="isTrue"> ' 分支1代码 </xsl:when> <xsl:otherwise> ' 分支2代码 </xsl:otherwise> </xsl:choose>
这里每个分支里的缩进回车都会变成空行。要么把代码直接贴在标签后面,要么用<xsl:text>把要输出的内容包起来,别留多余空白:
<xsl:choose><xsl:when test="isTrue"><xsl:text>' 分支1代码 </xsl:text></xsl:when><xsl:otherwise><xsl:text>' 分支2代码 </xsl:text></xsl:otherwise></xsl:choose>
虽然看起来有点丑,但能彻底解决空行问题。
4. 关闭输出缩进
有些XSL处理器哪怕指定了method="text",还是会默认加缩进,显式关掉:
<xsl:output method="text" encoding="utf-8" indent="no"/>
5. 检查源XML的空白
如果你的源XML里有多余的空白文本节点,也可能被输出出来,要么清理源XML里的无关空白,要么用xsl:strip-space把源XML的元素也包含进去。
内容的提问来源于stack exchange,提问作者Aspen Blaze
相关产品推荐
相关产品推荐

