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
付いた要素がhref
最初のテンプレートと一致し、一般的なテンプレートを呼び出す前後に追加の処理を行うということtag
です。のないタグhref
は、ラッピングロジックのない通常のテンプレートにヒットします。つまり、次のような入力の場合
<root>
<tag>foo</tag>
<tag href="#">bar</tag>
</root>
次のような出力が得られます
Tag content was "foo"
<a href="#">Tag content was "bar"</a>
以前も同じ問題があり、ブランチ<a href='{$href}'>...</a>
ごとに全体をコピーすることでしか解決できませんでした。when
XSLのを緩いXML標準に設定してみることができるかもしれませんがdoctype
、afaikXSLTはかなり厳格です。
<xsl:output>
編集:どうやらあなたはタグでdoctypeを設定することができます。
ネット上で解決策が見つかりました:
<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>