XSL  换新线

时间:2011-08-05 08:00:31

标签: c# xslt xslcompiledtransform

我有这段代码:

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

问题是转化后我得到:

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

我的xsl:输出是缩进=“否”。

Visual Studio缩进所有文件。所以把代码放在一行但是

<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 个答案:

答案 0 :(得分:2)

使用内联评估语法。

<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 :(得分:1)

检查样式表中的任何位置是否有xml:space属性。这将导致xsl:attribute指令中的空格被视为重要。

答案 2 :(得分:0)

<a>内的空白(空格和换行符)被认为是重要的。

如果您想确保XSLT处理器忽略该空格,请将文本“bar”放在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,而无需担心可能包含哪些空格和换行符。