2010-02-17 41 views
3

我有一些代碼包含在CDATA標籤的XSLT文件:XSLT呈現>和<><如何解決此問題?

<span> 
    <xsl:text><![CDATA[<asp:LinkButton ID ="]]></xsl:text><xsl:value-of select="ID"/> 
    <xsl:text><![CDATA[" onclick="LinkClicked">]]></xsl:text > 

    <xsl:value-of select="."/> 
    <xsl:text><![CDATA[</asp:LinkButton>]]></xsl:text> 
</span> 

當它呈現的是&gt;&lt;的頁面,我怎麼解決這個得到什麼?

現在我知道一個解決方法,因爲我可以在渲染後在字符串中進行替換,但這看起來不是最好的方法。

回答

6

你需要改變你的XSLT代碼:

<span> 
    <asp:LinkButton ID="{ID}" onclick="LinkClicked"> 
    <xsl:value-of select="."/> 
    </asp:LinkButton> 
</span> 

這一切CDATA雜耍不僅不利於大家的視線,也是錯誤的做法,不管你如何看待它。

聲明asp命名空間,XSLT和使用實際 ASP.NET代碼,而不是文本看起來像代碼。

+0

非常感謝你 – 2010-02-17 12:42:52

+0

哦是啊現在我知道我爲什麼使用CDATA我在Visual Studio的設計器中發現錯誤:名稱空間前綴'asp'未定義 – 2010-02-17 12:46:06

+0

這是因爲您沒有正確定義該前綴。就像我所說的「在XSLT中聲明asp命名空間」。 – Tomalak 2010-02-17 12:49:05

2

這並不回答你的問題,但有另一種方式來包括.net標記。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:asp="remove"> 

注意的xmlns:ASP = 「刪除」

無需包裝你的控制標籤中的xsl:文本或CDATA節。

2

你爲什麼要在CDATA中包裝一個標籤?你描述的行爲正是你期望的行爲,這就是爲什麼人們使用CDATA來處理他們想要轉義的內容。

+0

新的xslt和使用cdata繞過標籤警告,沒有意識到如何調用像湯姆建議的ID,雖然仍然得到錯誤命名空間沒有定義 – 2010-02-17 12:43:30

相關問題