由于 xslt,我希望有未关闭的 html 标记。稍后我将在 xslt 中添加结束标记。我怎样才能做到这一点?这个不编译:
<xsl:when test="$href">
<xsl:text><a href='{$href}'></xsl:text>
</xsl:when>
谢谢
这是您可能应该不惜一切代价避免的事情。我不知道您的要求,但您可能想要基于某些东西的链接或跨度标签。
在这些情况下,您可以使用类似这样的东西
<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>
如果没有更好地了解确切的用例,很难给出明确的答案,但值得注意的是,您可以match
在 name
相同的<xsl:template>
. 例如,如果您想为所有<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
带有 an 的元素href
将匹配第一个模板,该模板在调用通用模板之前和之后进行一些额外的处理tag
。没有 an 的标签href
只会命中没有包装逻辑的普通模板。即对于像这样的输入
<root>
<tag>foo</tag>
<tag href="#">bar</tag>
</root>
你会得到像这样的输出
Tag content was "foo"
<a href="#">Tag content was "bar"</a>
在网上找到解决方案:
<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>
我之前也遇到过同样的问题,只能通过复制<a href='{$href}'>...</a>
每个when
分支的全部来解决。
也许您可以尝试将doctype
您的 XSL 设置为一些宽松的 XML 标准,但是 afaik XSLT 非常严格。
编辑:显然您可以使用<xsl:output>
标签设置文档类型。