2016-05-24 147 views
0

我衝過幾個存在的問題,但它們指的是XML中存在的空格。我試圖刪除由於xslt代碼格式而發生的空格。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> 
+0

'xsl:strip-space'也許? –

+0

@KerrekSB'xsl:strip-space'元素用於定義要刪除空白空間的元素。我的元素中沒有空白區,所以我認爲這不會有幫助。 –

+0

@AlexandruCimpanu請發佈一個**可重現的例子 - 請參閱:[mcve]。 –

回答

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> 
+0

我試圖把代碼放在中間,但'xsl:text'不能包含子元素錯誤 –

+0

請檢查我的更新。 –

+0

那麼這是唯一的解決方案? –

2

有關信息,XSLT 3.0允許(例如)

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

您可以微調,你想要換行 - 我不清楚你需要什麼。