由於xslt的原因,我想要關閉html標籤。稍後我會在xslt中添加結束標記。我怎樣才能做到這一點?這一個不編譯:xslt中未封閉的html標籤
<xsl:when test="$href">
<xsl:text><a href='{$href}'></xsl:text>
</xsl:when>
感謝名單
由於xslt的原因,我想要關閉html標籤。稍後我會在xslt中添加結束標記。我怎樣才能做到這一點?這一個不編譯:xslt中未封閉的html標籤
<xsl:when test="$href">
<xsl:text><a href='{$href}'></xsl:text>
</xsl:when>
感謝名單
在網上找到的解決方案:
<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
分支來解決它。
也許你可以嘗試將XSL的doctype
設置爲一些鬆散的XML標準,但afaik XSLT非常嚴格。
編輯:顯然你可以用<xsl:output>
標籤設置文檔類型。
這是什麼樣的,你可能應該要不惜一切代價避免的事情。我不知道你的要求,但你可能想要一個基於某種東西的鏈接或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>
很難給出一個明確的答案不準確的用例的一個更好的主意,但它的值得注意的是,您可以在同一<xsl:template>
上使用match
和name
。例如,如果你想生產的所有<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>
請使用禁用輸出轉義檢查我的答案應該只能作爲最後的手段!而且經常被誤解XSLT的人們使用,這經常導致過度複雜的簡單解決方案:) – Treemonkey