課程設計指導——如何應用XML+XSLT技術分離Web表示層數據和樣式

2020-12-14 楊教授工作室

軟體項目實訓及課程設計指導——如何應用XML+XSLT技術分離Web表示層數據和樣式

1、「XML+XSLT」技術在J2EE技術平臺中的應用

Java語言及相關的應用技術的產生解決了跨平臺的軟體應用系統的開發,但沒有解決如何實現跨平臺的數據交換問題。在傳統的軟體應用系統中,為了能夠實現在不同的系統平臺之間交換數據、同時還要保證數據的完整性,是相對比較麻煩的一件事情。

基於此應用的目的和要求,誕生了XML(eXtensible Markup Language,可擴展標記語言)技術。應用XML語言可以實現軟體應用系統中的「內容」與「表現」相互分離,並且XML還是一種可擴展的標籤語言。

如下示例圖中的代碼為一個定義學生信息的XML格式文檔示例,讀者從此示例中可以了解到XML格式文檔只定義數據內容(或者應用系統處理的最終結果),而這些數據或者結果最終在什麼終端設備顯示、以及以什麼風格顯示都沒有定義。

基於XML語言及應用技術的XSLT(Extensible Stylesheet Language Transformations,擴展樣式錶轉換語言)的主要作用是將XML由一種格式轉換為另一種格式(當然,也可以為其它格式,如HTML網頁,純文字等),而在J2EE Web應用系統的開發實現中,應用XSLT技術能夠實現將XML格式的源文檔通過轉換引擎並按照XSL(eXtensible Stylesheet Lanaguage,擴展樣式表語言)模板的格式最終轉換輸出目標HTML格式的文檔。

如下示例圖中的代碼為某個XSLT文檔文件的內容,其中包含有<xsl:stylesheet>、<xsl:template>等標籤,同時在<xsl:template></xsl:template>標籤內包含有一個完整的HTML文件所應該具有的標籤。這些標籤都起什麼作用?源XML文檔最終在瀏覽器中的顯示結果如何?

由於XSLT文檔文件本身也是一個 XML格式的文檔,因此它也總是由如下的XML聲明語句起始:<?xml version="1.0" encoding="gb2312"?>

但由於本文章的篇幅有限,讀者如果需要詳細了解和學習XML、XSLT和XHTML等相關的語法、技術和應用等,可以參考作者的《J2EE Web核心技術——XHTML與XML應用開發》一書中相關章節內容。

讀者也許還會有許多的疑問,比如為什麼要多此一舉?請讀者保持耐心,繼續往下閱讀。

2、XSL技術概述及在J2EE系統平臺中的應用

(1)XSL是什麼

XSL就是可擴展樣式表語言(eXtensible Stylesheet Lanaguage),XSL是參考SGML(Standard Generalized Markup Language,標準通用標記語言)中的DSSSL(Document Style Semanticsand Specification Language,文檔樣式語義和規範語言,它主要是用來設置SGML的表現樣式)而設計的。

(2)為什麼要提供XSL技術

儘管「CSS+Div」能夠為Web應用系統的頁面開發人員分離Web頁面中的結構和風格,從而實現分離Web頁面中的數據和表現。但如果其中的數據是採用XML格式表示,此時如果再繼續採用CSS層疊樣式表技術來為該XML格式文檔數據設置表現樣式,由於CSS層疊樣式表採用的是與XML完全不同的一套語法規則定義,無法使用相同的XML解析器進行處理和解析,這為軟體應用系統項目開發帶來了許多額外的負擔。

最初設計XSL的主要目的就是希望採用XML格式的語法規則提供一種為XML文檔設置表現樣式的新方法。而CSS的主要問題是由於沒有邏輯控制的能力——CSS不能重新排序文檔中的元素、也不能判斷和控制哪個元素被顯示、哪個不被顯示、當然也不能統計計算元素中的數據等功能要求。

因此CSS層疊樣式表技術一般只適合用於輸出固定內容的最終Web頁面文檔,但CSS層疊樣式表技術的主要優點是簡潔、消耗系統資源少;而XSLT雖然功能強大,但因為要重新索引XML結構樹,所以消耗系統內存量比較多。

在企業級的軟體應用系統開發中,一般常常將CSS和XSLT兩者相互結合使用。比如在Web伺服器端用XSLT處理相關的文檔,而在客戶端則用CSS層疊樣式表技術來控制數據在瀏覽器端的最終顯示風格,這樣的設計方案能夠大大地減少響應時間。

3、XSL技術主要包括兩個組成部分

XSL技術主要包括兩個組成部分:XSLT(eXtensible Stylesheet Language Transformation)和XSL-FO(XSL Formatting Object)。

其中的XSLT主要是實現轉換XML格式的文檔,而XSL-FO主要是格式化XML文檔。其中XSL-FO的作用就類似CSS層疊樣式表技術在HTML頁面中的作用,但作者在本文中重點為讀者介紹XSLT相關的技術及應用。

因此,XSL從本質上可以看著為是一種可以將XML轉化成其它類型語言的語言、一種可以過濾和選擇XML數據的語言、一種能夠格式化XML數據的語言。

4、XSLT主要是面向轉換類型的應用

XSLT的主要作用是將XML文檔數據內容由一種格式轉換為另一種格式——比如,將XML格式的文檔轉換為HTML/XHTML(或者WML)等格式的文檔是目前XSLT應用最為廣泛的應用領域。

為什麼要應用XSLT及相關的技術?因為XML格式的數據文檔能夠便於交換但不便於人類的閱讀和理解、特別是機器自動化地閱讀。因此如何能夠按照人類的要求顯示XML格式文檔中的數據?如何實現將同一個XML格式文檔中的數據在不同的顯示平臺中顯示輸出?

5、XSLT數據格式轉換的基本實現原理

數據格式轉換的重要思想是要把XML格式文檔視為一種樹形結構,轉換的過程其實就是從源XML格式文檔樹生成結果樹的過程。其中的XSL樣式單定義了源XML格式文檔樹和結果樹中對應部分的轉換規則,在每條規則中包含了一個模板,並對應著一種模式——模板定義了轉換的結果和轉換的基本規則,而模式則規定了需要進行轉換的元素或屬性對象。

6、XSLT數據格式轉換的實現過程

首先,將XML格式文檔轉換為DOM(Document Object Model,文檔對象模型)樹結構,這主要是利用XSLT來實現——XSLT處理器首先要做的是通過XML解析器(比如DOM或SAX)技術讀取XML格式文檔中的各個標籤和數據,並將XML樹狀結構重新整理和組合產生出一個臨時的樹狀結構,這個樹狀結構稱為XML文檔結果樹。

其次,再對轉換後的DOM樹進行格式化並轉換為其它的目標形式,這主要是利用XSL-FO來實現。XSL處理程序將這些數據轉換(也就是格式化過程)為另一種格式良好的XML文件(如:WML、HTML、VoiceXML等)。

目前在微軟IE瀏覽器中已經內嵌有實現這個轉換過程的XML處理器程序。歡迎讀者繼續閱讀作者的另一篇文章《軟體項目實訓及課程設計指導--應用XML+XSLT技術分離Web表示層數據和樣式示例》可以詳細學習和了解如何在軟體應用系統開發中應用XML+XSLT技術。

7、應用XSLT實現對XML格式文檔中的數據轉換和合併的應用示例

為了能夠讓讀者對「XML+XSLT」技術在企業級軟體應用系統開發中的應用有感性的認識,作者在下文中給出一個典型示例加以說明。

在下面示例中的XML格式文檔中的「學生信息」節點中有多個「班級」節點,可以通過XSLT中的<xsl:for-each>標籤把這些節點數據在一個表格單元格中顯示出來,從而產生出合併數據的應用效果。當然,也可以實現其它的應用效果,讀者可以自行實現。

(1)示例中所對應的XML格式文檔

該XML文檔文件名稱為student.xml,其中在<?xml-stylesheet?>標籤中通過href屬性指定對應的XSLT文件,該文件名稱為student.xsl。

<?xml version="1.0" encoding="GB2312" standalone="yes" ?>

<?xml-stylesheet type="text/xsl" href="student.xsl"?>

<軟體學院學生信息>

<學生信息 性別="男">

<姓名>張三</姓名>

<出生日期>1987/10/18</出生日期>

<專業>軟體工程</專業>

<班級 方向="J2EE軟體開發">軟體1班</班級>

<班級>9教東201</班級>

</學生信息>

<學生信息 性別="女">

<姓名>李四</姓名>

<出生日期>1988/2/18</出生日期>

<專業>軟體工程</專業>

<班級 方向="數字媒體方向">軟體2班</班級>

<班級>9教東202</班級>

</學生信息>

</軟體學院學生信息>

(2)示例中的XML文檔所對應的XSLT文檔(student.xsl) 文件

在student.xsl 文件中應用了XSL語言中的一些標籤,而XSLT文件中的標籤語法大致可分為如下的三種類型:

1)選擇模式,如<xsl:for-each>、<xsl:value-of>和 <xsl:apply-templates>等標籤,這些選擇模式的標籤語句將數據從XML文檔中提取出來,是一種簡單獲得數據的方法。在這些標籤中都有一個select屬性,選取XML文檔中特定的節點名的數據。

2)測試(識別)模式,如<xsl:if> 和<xsl:when>等標籤,類似於程式語言中的條件語句,主要是用於條件判斷和識別等用途。

3)匹配模式,如<xsl:template>標籤,它用於構建和定義一個模板。該標籤中的match 屬性主要是用於關聯 XML文檔中的標籤元素和轉換模板,但match 屬性的值是 XPath 表達式(比如match="/" 則是定義整個XML格式文檔);位於<xsl:template> 標籤元素內部的內容則定義了寫到輸出結果的 HTML標籤代碼。

<?xml version="1.0" encoding="gb2312" ?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">

<html>

<head>

<title>XX交通大學軟體學院學生信息</title>

</head>

<body>

<xsl:apply-templates/>

</body>

</html>

</xsl:template>

<xsl:template match="軟體學院學生信息">

<h3>下面為XX交通大學軟體學院學生信息表</h3>

<table border="1">

<th>姓名</th>

<th>性別</th>

<th>出生日期</th>

<th>專業</th>

<th>班級</th>

<th>專業方向</th>

<xsl:apply-templates/>

</table>

</xsl:template>

<xsl:template match="學生信息">

<tr>

<td><xsl:value-of select="姓名"/></td>

<td><xsl:value-of select="@性別"/></td>

<td><xsl:value-of select="出生日期"/></td>

<td><xsl:value-of select="專業"/></td>

<td>

<xsl:for-each select="班級">

<xsl:value-of />

</xsl:for-each>

</td>

<xsl:apply-templates/>

</tr>

</xsl:template>

<xsl:template match="班級">

<td><xsl:value-of select="@方向"/></td>

</xsl:template>

</xsl:stylesheet>

在student.xsl 文件中應用了<xsl:apply-templates> 標籤元素產生模板嵌套的應用效果,因為<xsl:apply-templates> 標籤元素可把一個模板應用於當前的標籤元素或者當前標籤元素的子節點中。

如果向 <xsl:apply-templates> 標籤元素添加一個 select 屬性,則此標籤元素就會僅僅處理與由其select 屬性所定義的XML標籤中屬性值相匹配的XML標籤元素,從而可以過濾XML標籤。

(3)本示例在Web瀏覽器中最終執行的結果

課程設計指導—如何應用CSS+Div分離Web表示層數據處理和展現邏輯

如何應用策略設計模式的思想設計通用的資料庫連接類

如何應用觀察者設計模式重構系統中日誌處理功能實現的程序代碼

如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息

如何正確地創建和銷毀軟體應用系統中JDBC資料庫連接對象實例

相關焦點

  • 應用XML+XSLT技術分離Web應用系統中表示層數據和樣式的實例
    軟體項目實訓及課程設計指導——應用XML+XSLT技術分離Web應用系統中表示層數據和樣式的實例1、在J2EE應用系統中應用XSLT實現XML文檔轉換的基本過程(1)首先,創建出目標XML格式文檔文件,該XML格式文檔文件代表應用系統中的數據模型
  • 課程設計指導——如何應用OSCache緩存框架提高Web頁面響應性能
    軟體項目實訓及課程設計指導——如何應用OSCache緩存框架提高Web頁面響應性能1、緩存應用技術是提高軟體應用系統性能的最簡單和最有效的方式之一在計算機的軟硬體系統中大量地應用緩存(Cache)技術,所謂「緩存」是指位於「目標」(可以為軟體類的應用系統,也可以為硬體設備或者部件
  • 如何在Web應用系統表示層開發實現中應用Velocity模板技術
    軟體項目實訓及課程設計指導——如何在Web應用系統表示層開發實現中應用Velocity模板技術1、分離Web表示層的數據處理和展現邏輯的常見的應用技術分離Web表示層的數據處理和展現邏輯是目前企業級的Web應用系統開發中表現層組件開發實現中的基本實現目標。
  • 如何在Web應用中實現Velocity 與Struts2框架相互集成的應用實例
    軟體項目實訓及課程設計指導——如何在Web應用系統中實現Velocity 與Struts2框架相互集成的應用實例1、Struts 2應用框架提供對 Velocity 和 FreeMarker 模板引擎的支持在Struts 2應用框架中不僅繼續保留有對Velocity
  • 如何應用XML+XSLT+AJAX組合技術實現無刷新的數據查詢的應用實例
    軟體項目實訓及課程設計指導——如何應用XML +XSLT +AJAX組合技術實現無刷新的數據查詢的應用實例1、在Web應用系統項目中添加一個實現查詢的請求頁面searchBook.jsp(1)創建searchBook.jsp頁面文件的過程示圖
  • 項目實訓及課程設計——如何合理地設計軟體應用系統的Web表示層
    軟體項目實訓及課程設計指導——如何合理地設計軟體應用系統的Web表示層1、用戶界面是軟體應用系統的門面,在設計和開發實現時必須高度重視軟體應用系統表示層內的各個組件是軟體應用系統的前端界面組件,它們直接與應用該軟體應用系統的最終操作者發生各種人機互動行為。
  • 如何優化Web應用數據訪問實現方式以提高軟體應用系統的響應性能
    軟體項目實訓及課程設計指導——如何優化Web應用數據訪問實現方式以提高軟體應用系統的響應性能在軟體應用系統中離不開數據訪問和數據處理兩個方面的功能,而數據處理之前首先要進行數據訪問,也就是只有快速地獲得了數據,才能進行下一步的數據處理。
  • 如何應用Web頁面靜態化技術以提高J2EE Web應用系統的響應性能
    軟體項目實訓及課程設計指導——如何應用Web頁面靜態化技術提高Web應用系統的響應性能1、什麼是Web頁面靜態化技術(1)Web頁面靜態化技術將JSP動態頁面按照某種模板格式生成對應的*.html純靜態Web頁面的過程
  • 課程設計指導——如何應用Java反射技術靈活地創建程序類對象實例
    軟體項目實訓及課程設計指導——如何應用Java反射技術靈活地創建程序類的對象實例1、如何應用屬性配置文件實現對系統中的配置信息進行讀寫操作Java中的屬性配置文件主要可以作為軟體應用系統及項目的配置文件,比如許多J2EE的開源框架系統中都提供了屬性配置文件作為該應用框架的對外配置文件
  • 如何應用EhCache緩存框架提高J2EE Web應用系統持久層的響應性能
    軟體項目實訓及課程設計指導——如何應用EhCache緩存框架提高應用系統持久層響應性能1、在Web應用系統中應用持久層相關的緩存框架在Java應用程式開發實現和J2EE Web應用系統的設計和開發實現中,軟體應用系統的設計和開發實現人員可以在系統的表示層和系統的持久層中充分地應用緩存機制和相應實現技術能夠大大地提高
  • 軟體項目實訓及課程設計指導——系統概要設計中的組件設計示例
    軟體項目實訓及課程設計指導——軟體系統概要設計中的組件設計示例1、UML技術規範中的UML組件及UML組件圖UML技術規範中的組件是軟體應用系統的一個物理單元,它代表軟體應用系統中的一個物理實現的功能模塊——在Java技術平臺中一般為一個*.jar包文件。
  • 課程設計指導——應用AJAX技術提高Web應用系統的整體響應性能
    軟體項目實訓及課程設計指導——應用AJAX技術提高Web應用系統的整體響應性能1、軟體應用系統的性能指標是衡量軟體應用系統優劣程度的一個重要指標Web應用系統由於是基於HTTP協議產生請求、並由Web伺服器端程序處理對應的請求、最後再次通過HTTP響應向Web
  • 如何保證軟體應用系統架構設計結果的可擴展性和可重用性(上篇)
    軟體項目實訓及課程設計指導——如何保證軟體應用系統架構設計結果的可擴展性和可重用性(上篇)1、良好的可重用性軟體系統架構設計結果的主要體現可重用性的軟體應用系統的系統架構設計結果主要體現在如下兩個方面——本項目的系統架構設計的結果是可重用的和在本項目的系統架構設計中重用成熟的系統架構設計方案
  • 如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息
    軟體項目實訓及課程設計指導——如何應用策略設計模式分離JDBC資料庫連接中的外部環境信息1、什麼是策略(Strategy)設計模式策略設計模式把「算法」(也就是軟體應用系統中的業務規則或者待實現的功能等)和「環境」(封裝軟體應用系統在實際應用時的場景)相互分離
  • Web應用程式開發的前5位Java框架
    如果您想用Java開發下一個Web應用程式,那麼您需要在選擇適當的JavaWeb框架時做出正確的選擇。您想知道如何為您的項目選擇APT Java框架嗎?我們將通過向您提供web開發的前5大Java Web框架列表來消除您的疑慮。
  • 如何正確地設計J2EE應用系統持久層中的各個組件結構及組件間關係
    軟體項目實訓及課程設計指導——如何正確地設計J2EE應用系統持久層中的各個組件結構及關係1、了解J2EE應用系統數據持久層中的各個組件類的類型在J2EE系統平臺下的軟體應用系統的數據持久層,一般都包含有如下的各個組件類:實體類、數據訪問對象類(包括接口和對應的實現類
  • 如何正確地創建和銷毀軟體應用系統中JDBC資料庫連接對象實例
    軟體項目實訓及課程設計指導——如何正確地創建和銷毀軟體應用系統中JDBC資料庫連接對象實例1、Java語言中提供有訪問資料庫系統的JDBC編程接口Java 資料庫連接技術(JDBC,Java DataBase Connectivity)其實是將Java語言與標準的
  • 軟體項目實訓及課程設計指導——如何實現面向服務的系統架構設計
    軟體項目實訓及課程設計指導——如何實現面向服務的系統架構設計1、什麼是基於SOA的軟體系統架構(1)什麼是面向服務的軟體系統體系架構所謂的SOA(Service-Oriented Architecture,面向服務的軟體系統體系架構
  • 北大青鳥整理:一名web前端工程師需要必備哪些技術和工具?
    最近,有小夥伴私信留言讓我總結一下:「一個合格的web前端需要會什麼技術?」我想了半天,合格的web前端當然符合企業的用人要求啊!那麼一名web前端工程師需要必備哪些技術和工具?想要成為一個高薪高職的Web前端工程師並不容易,你不僅需要掌握專業的技能點,還要具備較多的項目經驗。
  • 軟體項目實訓及課程設計指導——可擴展和可重用是架構設計的目標
    軟體項目實訓及課程設計指導——可擴展性和可重用性是面向對象架構設計的主要目標1、什麼是合理的軟體應用系統的系統架構設計軟體應用系統的設計人員經常會陷入一種困惑,面向對象系統架構設計結果的評價標準是什麼?