XSLT删除输出

时间:2016-05-24 09:33:49

标签: c xslt

我重写了几个现有问题,但它们指的是xml中存在的空格。我试图删除由于xslt代码格式而出现的空格。

我有以下xsl代码,应该创建一个c文件:

#if (defined(<xsl:value-of select="./@Name"/>_TEST1)  || \
 defined(<xsl:value-of select="./@Name"/>_TEST2)  || \
 defined(<xsl:value-of select="./@Name"/>_TEST3) || \
 defined(<xsl:value-of select="./@Name"/>_TEST4) || \
 defined(<xsl:value-of select="./@Name"/>_TEST5) \
                <xsl:if test="CONDITION1">
 || defined(<xsl:value-of select="./@Name"/>_TEST6)  || \
    defined(<xsl:value-of select="./@Name"/>_TEST7)  || \
    defined(<xsl:value-of select="./@Name"/>_TEST8)
                </xsl:if>
                <xsl:if test="CONDITION2">
|| defined(<xsl:value-of select="./@Name"/>_TEST9)
                </xsl:if>
)

但是使用上面的结构,输出是:

#if (defined(NAME_TEST1)  || \
 defined(NAME_TEST2)  || \
 defined(NAME_TEST3) || \
 defined(NAME_TEST4) || \
 defined(NAME_TEST5) \

 || defined(NAME_TEST6)  || \
    defined(NAME_TEST7)  || \
    defined(NAME_TEST8)

)

这给出了c错误。 所需的输出是:

 #if (defined(NAME_TEST1)  || \
 defined(NAME_TEST2)  || \
 defined(NAME_TEST3) || \
 defined(NAME_TEST4) || \
 defined(NAME_TEST5) \
 || defined(NAME_TEST6)  || \
 defined(NAME_TEST7)  || \
 defined(NAME_TEST8))

UPDATE1

我设法让它像这样工作,虽然我真的不明白为什么它有效。有人可以启发我吗?

#if (defined(<xsl:value-of select="./@Name"/>_TEST1)  || \
 defined(<xsl:value-of select="./@Name"/>_TEST2)  || \
 defined(<xsl:value-of select="./@Name"/>_TEST3) || \
 defined(<xsl:value-of select="./@Name"/>_TEST4) || \
 defined(<xsl:value-of select="./@Name"/>_TEST5) \ <xsl:text></xsl:text>
            <xsl:if test="CONDITION1">
 || defined(<xsl:value-of select="./@Name"/>_TEST6)  || \
    defined(<xsl:value-of select="./@Name"/>_TEST7)  || \
    defined(<xsl:value-of select="./@Name"/>_TEST8) <xsl:text></xsl:text>
            </xsl:if>
            <xsl:if test="CONDITION2">
|| defined(<xsl:value-of select="./@Name"/>_TEST9) <xsl:text></xsl:text>
            </xsl:if>
<xsl:text>)</xsl:text>

2 个答案:

答案 0 :(得分:2)

有关信息,XSLT 3.0允许(例如)

<xsl:if test="CONDITION1" expand-text="yes">
defined({@Name}_TEST6)  || \
defined({@Name}_TEST7)  || \
defined({@Name}_TEST8){
</xsl:if>

您可以微调您想要换行的位置 - 我不清楚您的确切要求。

答案 1 :(得分:1)

你的问题已脱离背景。通常,最好使用xsl:text将文字文本写入输出树。

例如,而不是:

defined(<xsl:value-of select="./@Name"/>_TEST2)  || \

写:

<xsl:text>defined(</xsl:text>
<xsl:value-of select="./@Name"/>
<xsl:text>_TEST2)  || \</xsl:text>