Xsl & # xA; для новой линии в преобразовании - PullRequest
2 голосов
/ 05 августа 2011

У меня есть этот код:

<a>
   <xsl:attribute name="href">
        <xsl:value-of select="$foo"/>
   </xsl:attribute>
   bar
</a>

проблема после преобразования я получаю:

<a href="&#xA;                PooValue        &#xA;"                 >bar</a>

Мой xsl: вывод с отступом = "нет".

Визуальная студия делает отступ для всех файлов. Поэтому поместите код в одну строку, но

<a><xsl:attribute name="href"><xsl:value-of select="$foo"/></xsl:attribute>bar</a>

первый не очень читабелен, и VS изменит мне отступ, поэтому я хочу другое решение. вид:

<xsl:attribute name="href" select="concat(mystuff)" />

но его не существует и он не очень хорошо читается снова.

Другое решение может быть:

<a href="{$foo}" >bar</a>

но и как я могу использовать лечение xsl, как показано ниже:

<a>
       <xsl:attribute name="href">
             <xsl:choose >
                 <xsl:when test="$atest">
                    <xsl:value-of select="$foo"/>
                 </xsl:when>
                 <xsl:otherwise>
                    <xsl:value-of select="$foo2"/>
                 </xsl:otherwise>
             </xsl:choose >
       </xsl:attribute>
       bar
    </a>

Использование: <xsl:value-of select="normalize-space($foo)"/> не будет иметь эффекта, причина:
&#xA; создается между
<xsl:attribute name="href"> и <xsl:value-of select="normalize-space($foo)"/>

Я работаю в xslt 1.0 C# .net 4 с XslCompiledTransform

Подробнее: Я положил результат моего XslCompiledTransform в

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

Используйте встроенный синтаксис оценки.

<a href="{$foo}" />

Однако у вас, похоже, другая проблема.
Пробелы и новые строки, которые вы видите, исходят из источника данных, а не из источника данных.Шаблон XSL.

В этом случае вы можете использовать:

<a>
  <xsl:attribute name="href">
    <xsl:value-of select="normalize-space($foo)"/>
  </xsl:attribute>
  bar
</a>

РЕДАКТИРОВАТЬ:

Я могу воспроизвести это поведение, только если я прямо скажу:

<a>
  <xsl:attribute name="href" xml:space="preserve">
    <xsl:value-of select="$foo"/>
  </xsl:attribute>
  bar
</a>

В этом случае попробуйте

<a>
  <xsl:attribute name="href" xml:space="default">
    <xsl:value-of select="$foo"/>
  </xsl:attribute>
  bar
</a>
1 голос
/ 05 августа 2011

Проверьте, есть ли в таблице стилей атрибут xml: space. Это приведет к тому, что пробел в вашей инструкции xsl: attribute будет считаться значимым.

0 голосов
/ 07 августа 2011

Пробелы (пробелы и разрывы строк) внутри <a> рассматриваются как существенные.

Если вы хотите, чтобы процессор XSLT игнорировал этот пробел, поместите текстовую строку внутри элемента xsl:text:

<a>
   <xsl:attribute name="href">
        <xsl:value-of select="'foo'"/>
   </xsl:attribute>
   <xsl:text>bar</xsl:text>
</a>

В этомКстати, ясно, что единственный текст, который вы хотите включить в свой вывод, это то, что находится внутри xsl:text.

. Я получаю следующий вывод из вышеприведенного примера:

<a href="foo">bar</a>

Хотя это немного более многословно, размещение текста, который вы хотите вывести внутри xsl:text, помогает гарантировать, что в вывод включается только тот текст, который вы хотите, а не случайные пробелы и возврат каретки, и вы можете чувствовать себя свободноотформатировать XSLT, не беспокоясь о том, какие пробелы и разрывы строк могут быть включены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...