現在,XSLT 2.0已經不再只是一個理論上的標准了,有很多免費軟件都可以幫助您發揮出XSLT 2.0的力量,借助這些軟件您可以在軟件開發中應用XSLT 2.0。
幾周以前,我收到一位朋友的來信,提到了幾年前我開發的軟件,在這個軟件中我使用了XSL樣式表,我以前曾經寫過文章講解樣式表的使用方法。現在,我的這位朋友將要利用XSLT2.0的新特色對樣式表進行升級,這引起了我的興趣。
令人驚訝的是,我以前並沒有考慮過樣式表本身,而是在考慮如何應用樣式表。這是因為原來的軟件是用C#寫的,現在很多開發者都在等待微軟發布最新版本的MSXML來支持最新的標准,因為紙面上的標准是沒有任何價值的,除非有實際的工作實例作為參考。
如果您曾經為美國專利局工作過,那麼按照這種思路進行思考:發布一種沒有人知道怎麼進行構建的產品專利有什麼意義呢?實際上,除非您向風險投資推銷霧件或標記技術領域的專利,空有想法只能做到這種程度了,那麼下面讓我們來看看如何在實際工作中使用XSLT2.0。
軟件資源
現在有很多現成的工具可以選擇,首先,您需要微軟的Visual C# Express來編寫.Net代碼,但是微軟並沒有提供XSLT的處理器,因此我們需要從Altova獲取XSLT的處理工具。Altova是XMLSpy以及很多XML相關產品的軟件生產商。
且慢,先不用拿出您的支票本,我們所使用的來自Altova的軟件是免費的——AltovaXML 2007,該產品包含了XML檢驗工具、XSLT1.0處理器、XSLT2.0處理器和XQuery處理器。我們最感興趣的部分是XSLT2.0的處理功能,而微軟的MSXML中恰好沒有提供XSLT2.0的支持。
關於微軟Visual C# Express的安裝可以參考以前的技術文章,這裡就不再重復了,我們來介紹介紹AltovaXML 2007的安裝,其實該過程也很簡單,點擊了安裝文件並按照提示前進就可以了,圖片A和B展示了您在安裝過程中會看到的安裝屏幕截圖。
圖片A——安裝過程
圖片B——安裝過程的其他部分
在安裝了AltovaXML 2007之後,使用XSLT2.0起來也很簡單,只需要添加一個引用即可,如圖片C所示。
圖片C——添加一個引用
現在預備知識已經講解完了,我們現在來創建一個C#程序,列表A是XML文檔,列表B是XSLT文檔,列表C是我們使用的C#程序代碼。
列表A——XML文檔
<?XML version="1.0" encoding="UTF-8"?>
<world>
<country name="Canada" continent="North America">
<city>Toronto</city>
<city>Vancouver</city>
</country>
<country name="Jamaica" continent="North America">
<city>Kingston</city>
<city>Ocho RiOS</city>
</country>
<country name="United States" continent="North America">
<city>Allentown</city>
<city>Mobile</city>
</country>
<country name="United Kingdom" continent="Europe">
<city>London</city>
<city>Dundee</city>
</country>
<country name="France" continent="Europe">
<city>Paris</city>
<city>Nice</city>
</country>
<country name="Japan" continent="Asia">
<city>Tokyo</city>
<city>Osaka</city>
</country>
</world>
列表B——XSLT2.0樣式表
<?XML version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"XMLns:fo="
http://www.w3.org/1999/XSL/Format"xmlns:xs="http://www.w3.org/2001/XMLSchema"XMLns:fn="
http://www.w3.org/2005/xpath-functions"XMLns:xdt="http://www.w3.org/2005/xpath-datatypes">
<xsl:template match="/">
<xsl:element name="world">
<xsl:for-each-group select="//country" group-by="@continent">
<xsl:sort select="@continent" data-type="text" order="ascending"/>
<xsl:variable name="continent" select="@continent"/>
<xsl:apply-templates select="//country[@continent = $continent]" mode="group">
<xsl:sort select="@name" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:for-each-group>
</xsl:element>
</xsl:template>
<xsl:template match="*" mode="group">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
列表C——C#程序
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceWindowsApplication1
{
publicpartialclassForm1:Form
{
publicForm1()
{
InitializeComponent();
}
privatevoidForm1_Load(objectsender,EventArgse)
{
AltovaXMLLib.ApplicationClassobjAltova=newAltovaXMLLib.ApplicationClass();
textBox1.Text=Application.StartupPath+"....world2.XML";
textBox2.Text=Application.StartupPath+"....grouping2.xsl";
objAltova.XSLT2.InputXMLFileName=textBox1.Text;
objAltova.XSLT2.XSLFileName=textBox2.Text;
textBox3.Text=objAltova.XSLT2.ExecuteAndGetResultAsString();
}
}
}
示例
在以上的代碼中,我突出強調了這篇文章的主題——使用AltovaXML 2007的XSLT2.0功能。表A展示了應用到XSLT2.0的方法,表B展示了適用的屬性。
表A——方法
方法
說明
Execute
對當前XML文檔應用XSL樣式表,並將結果寫入程序提供的文件。
AddExternalParameter
在XSL樣式表上添加一個參數值。
ClearExternalParameterList
清除所有XSL樣式表參數。
ExecuteAndGetResultAsString
對當前XML文檔應用XSL樣式表,並返回結果字符串。
表B——屬性
方法
說明
InputXMLFileName
設定需要轉換的XML文件名。
InputXMLFromText
從字符串獲取需要轉換的XML文件名。
LastErrorMessage
最後的錯誤信息字符串。
XSLFileName
設定XSLT樣式表的文件名。
XSLFromText
從字符串獲取樣式表的文件名。
XSLStackSize
樣式表中允許的最大遞歸深度,默認是是1000,最小值是100.
結果
應用以上所有的技術,我們得到的結果看上去應當和圖片D差不多。
圖片D——結果
下一步如何開展
這個例子已經顯示出XSLT2.0已經具備實際應用的價值了,盡管這個例子本身平淡無奇,但是通過免費資源,我們已經可以很好地利用XSLT2.0的強大功能了。
但是在真正的商業環境中,您可能需要購買一些相關的參考資料,Michael Kay的XSLT 2.0 Programmer's Reference(XSLT2.0程序員參考指南)是一個不錯的選擇;另外,您可能還要花些錢在XMLSpy的完整版本上,不過放心,在真正的應用軟件上,XMLSpy所發揮出的功能是值得您進行投資的。