以下代码仅在我删除所有new lines
时才有效。
这不起作用:
<input type="radio">
<xsl:if test="@selected = 'true'" >
<xsl:attribute name="checked">
<xsl:value-of select="@selected" />
</xsl:attribute>
</xsl:if>
</input>
这有效:
<input type="radio"><xsl:if test="@selected = 'true'" ><xsl:attribute name="checked"><xsl:value-of select="@selected" /></xsl:attribute></xsl:if></input>
此代码也有效,但它并不是更好:
<input type="radio"
><xsl:if test="@selected = 'true'"
><xsl:attribute name="checked"
><xsl:value-of select="@selected"
/></xsl:attribute
></xsl:if
></input>
如何使xslt文件可读并保持代码正常工作?
答案 0 :(得分:2)
我会将我的评论扩展为答案,因此它可以帮助其他人......
根据W3C specification about Whitespace stripping文本节点从XSLT中剥离,除非以下之一为真
#x20
,#x9
,#xD
或#xA
。 xml:space
属性,其值为preserve,并且没有更近的祖先元素具有xml:space,其值为default。在您的情况下,父节点上的xml:space="preserve"
为input
。这意味着用于缩进XSLT的空白节点实际上被复制到输出而不是从XSLT中删除。但是,如果要向父元素添加属性,则必须在将任何子节点(包括文本节点)添加到父节点之前执行此操作(请参阅http://www.w3.org/TR/xslt#creating-attributes)。
解决方案就是删除xml:space
,或者不将其设置为“保留”。