首页 新闻 赞助 找找看

XSL格式控制问题

0
悬赏园豆:20 [已解决问题] 解决于 2012-03-28 11:55
    <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文档中换行。

zsounder的主页 zsounder | 老鸟四级 | 园豆:2819
提问于:2012-03-12 11:42
< >
分享
最佳答案
0

也遇到过这样的问题,解决方法就是那样,呵呵

收获园豆:20
OOLi | 初学一级 |园豆:163 | 2012-03-12 12:18

这样的解决方案,用起来太麻烦了,有时候为了实现合适的格式输出,不得不把一条匹配规则写的那么………………长,太麻烦了。

zsounder | 园豆:2819 (老鸟四级) | 2012-03-12 12:51

@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>


zsounder | 园豆:2819 (老鸟四级) | 2012-03-13 11:49
其他回答(1)
0

这个问题,简单的解决就是:在XSL中出现的直接字符,使用<xsl:text></xsl:text>包裹,例如<xsl:text>{</xsl:text>,而不要直接使用{,直接使用{容易引起的问题是在{前后的空格或者换行符号同样被引入目标文档中。

zsounder | 园豆:2819 (老鸟四级) | 2012-03-28 11:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册