我希望xslt能够使用未关闭的html标记。我稍后会在xslt中添加结束标记。我怎样才能做到这一点?这个不编译:
<xsl:when test="$href">
<xsl:text><a href='{$href}'></xsl:text>
</xsl:when>
感谢名单
答案 0 :(得分:1)
这是你可能想要不惜一切代价避免的事情。我不知道您的要求,但您可能需要基于某些内容的链接或跨度标记。
在这些情况下,你可以使用类似的东西
<xsl:apply-templates select="tag"/>
然后是2个模板,即
<xsl:template match="tag">
<span>hello king dave</span>
</xsl:template>
<xsl:template match="tag[@href]">
<a href="{@href}">link text....</a>
</xsl:template>
答案 1 :(得分:1)
如果没有更好地了解确切的用例,很难给出明确的答案,但值得注意的是,您可以在同一match
和 name
上使用<xsl:template>
{1}}。例如,如果您想为所有<tag>
元素生成一些特定输出,但在某些情况下也将此输出包装在<a>
标记中,那么您可以使用像
<xsl:template match="tag[@href]">
<a href="{@href}"><xsl:call-template name="tagbody" /></a>
</xsl:template>
<xsl:template match="tag" name="tagbody">
Tag content was "<xsl:value-of select="."/>"
</xsl:template>
这里的想法是tag
元素与href
匹配第一个模板,在调用常规tag
模板之前和之后进行一些额外的处理。没有href
的标签只会在没有包装逻辑的情况下点击普通模板。即输入如
<root>
<tag>foo</tag>
<tag href="#">bar</tag>
</root>
你会得到像
这样的输出Tag content was "foo"
<a href="#">Tag content was "bar"</a>
答案 2 :(得分:0)
之前我遇到了同样的问题,只能通过复制每个<a href='{$href}'>...</a>
分支的整个when
来解决问题。
也许您可以尝试将XSL的doctype
设置为一些松散的XML标准,但是XSLT非常严格。
修改:显然,您可以使用<xsl:output>
标记设置doctype。
答案 3 :(得分:0)
在网上找到解决方案:
<xsl:text disable-output-escaping="yes"><![CDATA[<a href=']]></xsl:text>
<xsl:value-of select="href"/>
<xsl:text disable-output-escaping="yes"><![CDATA['>]]></xsl:text>