xslt中未关闭的html标记

时间:2012-09-17 14:39:33

标签: java html xml xslt

我希望xslt能够使用未关闭的html标记。我稍后会在xslt中添加结束标记。我怎样才能做到这一点?这个不编译:

<xsl:when test="$href">
     <xsl:text><a href='{$href}'></xsl:text>
 </xsl:when>

感谢名单

4 个答案:

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