我有这段代码:
<a>
<xsl:attribute name="href">
<xsl:value-of select="$foo"/>
</xsl:attribute>
bar
</a>
问题是转化后我得到:
<a href="
 PooValue 
" >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)"/>
无效原因:
在{之间创建

<xsl:attribute name="href">
和<xsl:value-of select="normalize-space($foo)"/>
我使用xslt 1.0
C# .net 4
XslCompiledTransform
工作
更多细节: 我将XslCompiledTransform的结果放在
中答案 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,而无需担心可能包含哪些空格和换行符。