2016-05-24 2 views
0

Я краснул несколько существующих вопросов, но они имели в виду пространства, которые существуют в xml. Я пытаюсь удалить пробелы, которые происходят из-за формата кода xslt.XSLT удаляет пробелы между выводами

У меня есть следующий код XSL, который должен создать кесарево файл:

#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) 

) 

Что дает ошибку гр. Нужный выход:

#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' не должен содержать дочерние элементы error –

+0

Пожалуйста, проверьте мое обновление. –

+0

Так это единственное решение? –

2

Для получения информации, XSLT 3.0 позволяет (например)

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

Вы можете точно настроить где вы хочу новые строки - мне непонятно, что вам нужно.

Смежные вопросы