2012-09-17 57 views
0

由於xslt的原因,我想要關閉html標籤。稍後我會在xslt中添加結束標記。我怎樣才能做到這一點?這一個不編譯:xslt中未封閉的html標籤

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

感謝名單

回答

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> 
+3

請使用禁用輸出轉義檢查我的答案應該只能作爲最後的手段!而且經常被誤解XSLT的人們使用,這經常導致過度複雜的簡單解決方案:) – Treemonkey

0

我有同樣的問題之前,是隻能通過複製整個<a href='{$href}'>...</a>每個when分支來解決它。

也許你可以嘗試將XSL的doctype設置爲一些鬆散的XML標準,但afaik XSLT非常嚴格。

編輯:顯然你可以用<xsl:output>標籤設置文檔類型。

1

這是什麼樣的,你可能應該要不惜一切代價避免的事情。我不知道你的要求,但你可能想要一個基於某種東西的鏈接或span標籤。

在這種情況下,你可以使用這樣的事情

<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

很難給出一個明確的答案不準確的用例的一個更好的主意,但它的值得注意的是,您可以在同一<xsl:template>上使用matchname。例如,如果你想生產的所有<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> 
相關問題