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付いた要素がhref最初のテンプレートと一致し、一般的なテンプレートを呼び出す前後に追加の処理を行うということtagです。のないタグ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

以前も同じ問題があり、ブランチ<a href='{$href}'>...</a>ごとに全体をコピーすることでしか解決できませんでした。when

XSLのを緩いXML標準に設定してみることができるかもしれませんがdoctype、afaikXSLTはかなり厳格です。

<xsl:output>編集:どうやらあなたはタグでdoctypeを設定することができます。

于 2012-09-17T14:44:59.763 に答える
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 に答える