0

由于 xslt,我希望有未关闭的 html 标记。稍后我将在 xslt 中添加结束标记。我怎样才能做到这一点?这个不编译:

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

谢谢

4

4 回答 4

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>
于 2012-09-17T14:57:21.697 回答
1

如果没有更好地了解确切的用例,很难给出明确的答案,但值得注意的是,您可以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>
于 2012-09-17T15:15:36.277 回答
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>
于 2012-09-17T14:56:20.253 回答
0

我之前也遇到过同样的问题,只能通过复制<a href='{$href}'>...</a>每个when分支的全部来解决。

也许您可以尝试将doctype您的 XSL 设置为一些宽松的 XML 标准,但是 afaik XSLT 非常严格。

编辑:显然您可以使用<xsl:output>标签设置文档类型。

于 2012-09-17T14:44:59.763 回答