msxsl:script標記在xslt中的應用

來源:互聯網
上載者:User

  xslt被應用在對xml檔案的解析中,在asp.net編程中,使用xml控制項可以指定DocumentSource屬性以載入xml檔案,指定TransformSource屬性以載入xslt檔案,xml控制項會自動將轉換後的結果顯示在頁面上。xslt本身也支援很多xpath函數,以及一些簡單的邏輯語句,如if,choose-when-otherwise,for-each等,另外在xslt中也可以自訂方法(在xslt中稱之為模板)被其它的代碼重複調用,有關xslt的詳細介紹可以參考W3school的XSLT教程。

  自從微軟的MOSS出現以來,xslt的應用越來越廣泛,有時候我們也會碰到xslt與javascript以及一些伺服器端語言之間的互動問題,如我們需要根據javascript代碼中某一變數的值來決定是否在頁面上輸出內容,這個時候就需要在xslt中使用msxsl:script標記了。

  msxsl:script標記由Microsoft支援,它本身可以支援幾種不同的語言,如C#,VB.NET,JScript等,具體的使用方法和介紹可以參考下msdn,http://msdn.microsoft.com/en-us/library/533texsx(VS.71).aspx。另外,這裡還有一篇文章也詳細介紹了如何在xslt中使用msxsl:script標記,http://blog.joycode.com/saucer/archive/2004/05/12/21273.joy。

  基本上,我們在xslt中可以直接使用msxsl:script標記中定義好的公用方法和類型,如果是伺服器端語言,必須確保方法或類型是public的,而且參數或傳回值的類型在傳遞和接收時必須相同(有些參數類型在xslt中是不被支援的,大多數情況下我們可能會使用到nodelist類型)。當然,在使用伺服器端語言時,程式集和名稱空間的引用也是必要的,這裡有一個例子:

<msxsl:script language="C#" implements-prefix="user">
  <msxsl:using namespace="System.Web" />
  <msxsl:assembly name="System.Web" />
  public bool matchCurrUrl(string loc)
  {
    return HttpContext.Current.Request.Url.ToString().ToLower().IndexOf(loc.ToLower()) != -1;
  }
</msxsl:script>

  msxsl:using標記和msxsl:assembly標記分別用來引用名稱空間和程式集,理論上它們是可以被寫在xslt檔案的任何位置的。msxsl:script標記被標識為C#語言,而且matchCurrUrl方法中使用了HttpContext全域對象,該對象隸屬於System.Web名稱空間,因此在使用前必須添加程式集引用和名稱空間。不要指望xslt會自動為你載入程式集和名稱空間引用,因為msxsl:script標記並非w3c標準,你在使用它之前也要進行申明,如下面兩行: 

xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="urn:my-scripts"

   如果在msxsl:script標記中使用的是用戶端語言,如javascript,則要注意避免使用用戶端瀏覽器對象,如window、document等,因為xslt本身是在伺服器端解析的,伺服器並不知道用戶端的行為,我們在msxsl:script標記中編寫的javascript代碼應該會被映射成伺服器端方法才能被正確解析。如果你想在互動過程中得到用戶端訪問的頁面地址,最好的方法莫過於在C#中使用HttpContext.Current.Request.Url,而不要在javascript中使用document.location或window.location。

   使用msxsl:script標記可以省去開發過程中的很多麻煩,按照傳統的開發習慣,如果我們想在xslt中插入C#代碼,則一般的做法是將代碼寫在使用者控制項中,然後在xslt中輸出使用者控制項的引用標記。如果直接使用msxsl:script標記,你可以將所有的C#代碼寫在裡面,省去了編寫使用者控制項的麻煩!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.