在XSL使用陣列

2021-04-30 09:52:13 字數 1214 閱讀 5332

xsl是用來解釋xml檔案的語言,不過它支援的東西「太有限」了,比如,它沒有提供比較直觀的陣列資料型別。而陣列資料型別卻非常有用,例如:

我們想監測某個機器的網路流量,在xml檔案中我們想把單位資訊和位元組資訊分離開來,以便在xsl中用這些資訊來繪圖和進行相關計算。這些單位資訊有kb,mb,gb(對應1,1024,1048576)等,如果流量資訊特別多,我們直接傳送單位資訊似乎是不太好的,因為會存在很大的「冗餘」,所以會考慮採取「對映「來減少xml檔案的位元組數中。例如:

0 --> kb, 1

1 --> mb, 1024

2 --> gb, 1048576

在遇到單位的地方,全部轉換為前面的0,1,2,這樣每個單位資訊都可以減少乙個位元組。然後在xsl具體解釋時,把它們轉換回去,但是如何轉換呢?xsl沒有提供陣列,我們沒有辦法直接把0,1,2簡單地作為下標從陣列中取單位資訊。也許你說,為什麼不用條件判斷呢?這個是可以,但是會影響解釋xml檔案的效率。

在msxsl(ie)和exsl(opera)中,都提供了node-set()這樣乙個函式來使用如下乙個陣列變數:

code:

關於node-set()的具體用法請參考資料[1]。

不過firefox目前並不支援這個,所以還是得尋找替代方案。通過查詢資料發現,key()函式[2]可以有效地解決這個問題。

它的工作原理是:

首先通過xml中的資料來建立索引,然後在template中通過給key函式傳遞索引值來引用索引中的資料,從而可以實現「對映」。

還是以前面的單位資訊為例,先在xml檔案中設計好這麼乙個對映資料:

code:

節點中的每條資訊就是乙個單位,其中id作為索引值,而後面分別對應單位名稱和具體單位數值。

這樣在xsl中我們就可以先通過下面的語句來建立乙個索引:

code:

建立好索引以後就可以在template中使用了:

code:

參考資料

在html屬性中使用xsl變數

在使用xsl把xml轉換成html中,有時候 html元素屬性的值需要從xml文件中取 比如 的href屬性 和src屬性 此時需要用到xsl中的變數 宣告變數 name是後續要用到的變數名稱 select是從xml中取值的表示式 1.在html中使用變數 元素的href屬性值來之剛定義的變數 需要...

使用ant執行xsl轉換

本文用乙個簡單的例子來說明怎麼用ant來執行xsl資料轉換。前提條件 1,準備源資料 us.xml alabama alaska arizona arkansas california colorado connecticut delaware florida geia hawaii idaho i...

在XSL中取得當前時間

在xsl 中怎麼顯示當前時間,可以使用微軟的xsl 命名空間定義 一種是url 命名空間命名法 xmlns msxsl http www.w3.org tr wd xsl 一種是urn 命名空間命名法 xmlns msxsl urn schemas microsoft com xslt 具體 如下,...