<xsl:template match="parameterList">
(<xsl:apply-templates select="*"/>)
<xsl:if test="@../../type">:<xsl:value-of select="@../../type"/> </xsl:if>
</xsl:template>
如上面的XSL文档的一部分内容,如果写成上面的格式,XML文档转换之后是这样的:
public Main
()
现在想转换得到的显示为:
public Main()
就是不要出现换行符号,如何解决?
一种解决方式是将如上的XSL文档写作如下方式:
<xsl:template match="parameterList">(<xsl:apply-templates select="*"/>)
<xsl:if test="@../../type">:<xsl:value-of select="@../../type"/> </xsl:if>
</xsl:template>
但是,这样有一个问题,就是xsl文档的格式过于换乱,造成输出数据依赖于xsl文档的格式,如果在xsl文档中摒除其本身的空格和换行符号?就是说如果想在输出的文档中加入空格或者换行,是由我自己指定的,比如<br></br>这种方式,而不是显示的在XSL文档中换行。
也遇到过这样的问题,解决方法就是那样,呵呵
这样的解决方案,用起来太麻烦了,有时候为了实现合适的格式输出,不得不把一条匹配规则写的那么………………长,太麻烦了。
@Hui Wang:
在stackoverflow上问了一下,暂时性的解决方案,将xsl写成如下方式:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="method">
<xsl:choose>
<xsl:when test="@public">public </xsl:when>
<xsl:otherwise>private </xsl:otherwise>
</xsl:choose><xsl:if test="@static"><xsl:text>static </xsl:text></xsl:if><xsl:text>function </xsl:text><xsl:value-of select="@name"/>{
<xsl:call-template name="callAttribute"/>}
</xsl:template>
<xsl:template name="callAttribute">
<xsl:value-of select="block/call/callAttribute/variable/@name"/>(<xsl:value-of select="block/call/fieldAccess/@target"/>.<xsl:value-of select="block/call/fieldAccess/@name"/>, <xsl:value-of select="block/call/variable/@name"/>)
</xsl:template>
</xsl:stylesheet>
这个问题,简单的解决就是:在XSL中出现的直接字符,使用<xsl:text></xsl:text>包裹,例如<xsl:text>{</xsl:text>,而不要直接使用{,直接使用{容易引起的问题是在{前后的空格或者换行符号同样被引入目标文档中。