Tự học XML - Bài 5: XSL Style Sheets (Phần II)

pdf 42 trang ngocly 2170
Bạn đang xem 20 trang mẫu của tài liệu "Tự học XML - Bài 5: XSL Style Sheets (Phần II)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftu_hoc_xml_bai_5_xsl_style_sheets_phan_ii.pdf

Nội dung text: Tự học XML - Bài 5: XSL Style Sheets (Phần II)

  1. Bài 5 XSL Style Sheets (phần II) Cá c lêṇ h về điều kiêṇ Giống như trong ngôn ngữ lâp̣ triǹ h thông thường ta có các instructions về điều kiêṇ như IF, SELECT CASE, ELSE .v.v để lưạ choṇ , trong XSL ta có các lêṇ h về điều kiêṇ như xsl:if, xsl:choose, xsl:when, và xsl:otherwise. Khi expression của Element xsl:if, xsl:when, hay xsl:otherwise có tri ̣ s ố true, thi ̀ cái Template năm̀ bên
  2. trong nó sẽ đươc̣ taọ ra (instantiated). Thường thường, nếu công viêc̣ thử tính đơn giản ta dùng xsl:if. Nếu nó hơi rắc rối vi ̀ tùy theo trường hơp̣ ta phải làm những công tác khác nhau thi ̀ ta dùng choose/when/otherwise. Tri ̣số của Attribute test của xsl:if và xsl:when là môṭ expression để tính. Expression nâỳ có thể là môṭ so sánh hay môṭ expression loaị XPath. Kết quả viêc̣ tính nâỳ sẽ là true nếu nó trả về môṭ trong các tri ̣số sau đây: Môṭ bô ̣ node có ít nhất môṭ node Môṭ con số khác zero Môṭ mảnh (fragment) Tree Môṭ text string không phải là
  3. trống rỗng (non-empty) Để minh hoạ cách dùng các lêṇ h XSL về điều kiêṇ ta sẽ dùng hồ sơ nguồn tên catalog.xml sau đây: Ralls, Kim Midnight Rain Fantasy 5.95 2000-12-16 A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world. Thurman, Paula Splish Splash Romance
  4. 4.95 2000-11-02 A deep sea diver finds true love twenty thousand leagues beneath the sea. Knorr, Stefan Creepy Crawlies Horror 4.95 2000-12-06 An anthology of horror stories about roaches, centipedes, scorpions and other insects. Kress, Peter Paradox Lost Science Fiction 6.95 2000-11-02 After an inadvertant trip through a Heisenberg Uncertainty Device, James
  5. Salway discovers the problems of being quantum. O'Brien, Tim Microsoft .NET: The Programming Bible Computer 36.95 2000-12-09 Microsoft's .NET initiative is explored in detail in this deep programmer's reference. Dưới đây là môṭ thí du ̣ dùng xsl:if:
  6. 6"> cyan Trong thí du ̣ trên, Attribute bgcolor chỉ đươc̣ taọ ra với tri ̣ số cyan khi price của book lớn hơn 6. Muc̣ đích của ta là dùng màu xanh da trời nhaṭ để làm nền cho sách nào có giá (price) cao hơn 6. Dưới đây là môṭ thí du ̣ dùng xsl:choose:
  7. background- color: pink background- color: lightblue background- color: lightgreen Trong thí du ̣ trên Attribute style của Cascading Style Sheet sẽ có những tri ̣ số cho background-color khác nhau tùy theo loaị sách. Nếu là Romance thi ̀ pink, Fantasy thì
  8. lightblue, còn nếu không phải là Romance hay Fantasy (tứ c là xsl:otherwise) thi ̀ lightgreen. Màu nâỳ sẽ đươc̣ dùng làm nền cho đề muc̣ (title) của sách. Để ý là căp̣ T a g s , đươc̣ dùng để gói các xsl:when, và xsl:otherwise bên trong. Sau đây là listing của môṭ catalog.xsl style sheet đâỳ đủ, trong đó có cả hai cách dùng xsl:if và xsl:when nói trên:
  9. Book Lovers' Catalog Book Lovers' Catalog ID Author Title Genre Price
  10. Published Date Description background-color: pink <xsl:attribute
  11. name="style">background-color: lightblue background-color: lightgreen 6"> cyan
  12. Sau khi thêm câu: vào đâù hồ sơ catalog.xml, double click lên tên file catalog.xml, Internet Explorer sẽ hiển thi ̣ kết quả sau:
  13. Book Lovers' Catalog ID Author Title Ralls, Midnight bk102 Kim Rain Thurman, Splish
  14. bk107 Paula Splash Knorr, Creepy bk108 Stefan Crawlies Kress, Paradox bk109 Peter Lost
  15. Microsoft O'Brien, .NET: The bk110 Tim Programming Bible Baṇ có thể tải về catalog.xml và catalog.xsl taị đây. Dùng nhiều Templates trong môṭ Style Sheet
  16. Trong bài trước, trong mỗi XSL Style Sheet ta thấy vỏn veṇ chỉ có môṭ Template (bảng kẻm in), và nó đươc̣ áp duṇ g vào Root Element của tài liêụ XML. Thâṭ ra, XSL cũng cho phép ta dùng nhiều Templates trong môṭ Style Sheet. Có thể baṇ câǹ làm viêc̣ ấy vì hai lý do. Thứ nhất, baṇ có thể phân chia cách triǹ h bày ra từng phâǹ của tài liêụ XML, để dễ debug hay sử a đổi bô ̣ phâṇ nào của Style sheet. Thứ hai, baṇ có thể dùng XPath expressions để áp duṇ g kiểu triǹ h bày nào vào loaị dữ liêụ nào tùy theo tri ̣ số của nó. Khi môṭ Style Sheet chứ a nhiều
  17. templates, baṇ chỉ điṇ h viêc̣ áp duṇ g của chúng vào luâṇ lý triǹ h bày (presentation logic) băǹ g cách dùng lêṇ h apply-templates. Thông thường, baṇ taọ môṭ Template cho Root Element nói là để chế biến cả tài liêụ và dùng lêṇ h apply-templates để chế biến những Element năm̀ bên trong cái top-level template ấy. Những Templates nâỳ có thể đươc̣ goị lúc nào câǹ , và cái top-level template sẽ xử lý moị dữ liêụ không có Template nào nhắc tới. Tứ c là nếu Element nào không có template để áp duṇ g cho nó thi ̀ ta dùng cái template tổng quát của Root Element. Thí du ̣ như cái Style Sheet sau đây gồm có: môṭ top-level template để áp
  18. duṇ g vào Document (Root) Element, môṭ template cho những Element Product với Attribute UnitPrice có tri ̣ số lớn hơn 70, môṭ template cho những Element Product khác, và môṭ template cho những Element Quantity: Northwind Home Page Customer Order Order No:
  19. Date: Customer: ProductID Product Name Price Quantity Ordered 70]"
  20. Products.asp? ProductID= Khi áp duṇ g Style Sheet nâỳ vào cái tài liêụ đăṭ hàng XML, ta sẽ có hồ sơ HTML sau đây:
  21. Northwind Home Page Customer Order Order No: 1047 Date: 2002-03-26 Customer: John Costello ProductID Product Name Price Quantity Ordered 1 70
  22. 6 2 250 1 Phần BODY của HTML trên hiển thi ̣ như sau: Customer Order Order No: 1047
  23. Date: 2002-03-26 Customer: John Costello ProductID Product Price Name Ordered 1 Chair 70 2 Desk 250 Cá ch á p duṇ g Style Sheet vào tài liêụ XML Trước khi tiếp tuc̣ hoc̣ thêm các lêṇ h khác của XSL Style Sheet, ta câǹ hiểu và biết cách áp duṇ g môṭ Style Sheet vào môṭ tài liêụ XML. Á p duṇ g môṭ Style Sheet là môṭ chứ c
  24. năng của môṭ XML parser như MSXML của Internet Explorer. Baṇ có thể bảo môṭ XML parser áp duṇ g môṭ Style Sheet vào môṭ XML băǹ g cách hoăc̣ là chỉ câǹ nhét môṭ processing instruction vào đâù hồ sơ XML, hoăc̣ là viết môṭ vài dòng code. Dùng XML parser để hiển thi ̣ Nếu ta lưu trữ XSL Style Sheet của hồ sơ đăṭ hàng trong môṭ file tên Order.xsl thi ̀ ta có thể thêm môṭ hàng processing instruction xml- stylesheet vào đâù hồ sơ đăṭ hàng XML như sau:
  25. 2002-03-26 John Costello Chair 6 Desk 1 Khi môṭ XML parser đoc̣ hồ sơ XML nâỳ , cái processing instruction xml-stylesheet bảo parser áp duṇ g hồ sơ style sheet Order.xsl để transform XML.
  26. Attribute type cho biết loaị style sheet đươc̣ áp duṇ g, hoăc̣ là XSL style sheet hoăc̣ là cascading style sheet (CSS), môṭ loaị style sheet dùng để chỉ điṇ h màu và kiểu chữ. Ở đây nó là XSL style sheet trong daṇ g text. Attribute href cho biết tên của file dùng làm Style Sheet, path của tên file ấy có thể là tương đối hay tuyêṭ đối. Ở đây filename của style sheet là Order.xsl, không có path, nên có nghiã là nó năm̀ trong cùng môṭ folder với Order.xml. Nếu ta dùng môṭ chương triǹ h triǹ h duyêṭ như Internet Explorer 5.5 hay
  27. 6.0 nó sẽ tư ̣ đôṇ g load Style Sheet để thêm dáng điêụ cho tài liêụ XML. Trong lúc Internet Explorer hiển thi ̣ kết quả, nếu baṇ dùng Menu Comma nd View | Source của browser, baṇ sẽ chỉ thấy code của XML, chớ không thấy code HTML như baṇ đoán. Muốn xem đươc̣ code HTML, là kết quả của viêc̣ transform XML băǹ g cách áp duṇ g XSL baṇ câǹ tải về chương triǹ h công cu ̣goị là Internet Explorer XML/XSL Viewer Tools từ Microsoft Downloads. Sau khi Unzip file vừa tải về, baṇ right click tên của hai files msxmlval.inf và msxmlvw.inf rồi
  28. choṇ install để cài chúng làm Add- ins (những thành phâǹ thêm chứ c năng vào môṭ chương triǹ h có săñ ) vào chương triǹ h Internet Explorer như trong hiǹ h dưới đây. Bây giờ muốn xem code HTML, baṇ right click lên trang Web trong IE rồi choṇ command View XSLOutput
  29. từ PopUpMenu như trong hiǹ h dưới đây:
  30. Dùng code để transform với XSL Cách dùng môṭ ngôn ngữ lâp̣ triǹ h để bảo môṭ XML parser chế biến môṭ tài liêụ XML sẽ tùy thuôc̣ vào hoàn cảnh. Nếu baṇ dùng Microsoft XML parser, môṭ component tên MSXML, trong lâp̣ triǹ h thi ̀ tài liêụ XML sẽ đươc̣ loaded vào trong môṭ Document Object Model (XMLDom) object. Kế đó baṇ có thể goị method transformNode để áp duṇ g môṭ XSL style sheet đa ̃ đươc̣ loaded trước đó vào môṭ XMLDom object khác để chế biến XML. Như trong thí du ̣ dưới đây, ta dúng
  31. hai DOM, môṭ cái để load file Order.xml, môṭ cái khác để load Order.xsl trong VBScript chaỵ trên Active Server Pages (ASP): Dim objXML ' DOM for XML Dim objXSL ' DOM for XSL Dim strResult ' Resultant document 'Load the XML document. Set objXML = CreateObject("Microsoft.XMLDom") objXML.Async = False objXML.Load "c:\Order.xml" 'Load the XSL style sheet. Set objXSL = CreateObject("Microsoft.XMLDom") objXSL.Async = False objXSL.Load "c:\Order.xsl" 'Apply the style sheet to XML strResult = objXML.transformNode(objXSL) Sau khi chaỵ đoaṇ code trên, strResult sẽ chứ a hồ sơ kết quả.
  32. Hiǹ h dưới đây minh hoạ vai trò của XSLT processor trong công tác transform môṭ hồ sơ XML dưạ vào môṭ XSLT (từ giờ trở đi ta có thể dùng từ XSLT thế cho XSL cũng đươc̣ ) file:
  33. Ta cũng có thể code băǹ g JavaScript để chaỵ trong Browser, thay vi ̀ trong WebServer, như cho thấy trong trang Web dưới đây. Nó cũng cho ra cùng môṭ kết quả như khi dùng IE để hiển thi ̣XML trưc̣ tiếp. sample function init() { var srcDOM = new ActiveXObject("Msxml2.DOMDocument.4.0"); srcDOM.async=false; srcDOM.load("order.xml"); var xsltDOM= new ActiveXObject("Msxml2.DOMDOCUMENT.4.0"); xsltDOM.async = false; xsltDOM.load("order.xsl");
  34. resDOM.innerHTML = srcDOM.transformNode(xsltDOM); } Có lẽ baṇ hỏi taị sao ta không dùng thẳng XML như phía trên để hiển thi ̣trang Web. Lưu ý là ta có thể dùng kỹ thuâṭ nâỳ để Transform môṭ XML với XSL rồi hiển thi ̣ nó bên trong môṭ DIV, tứ c là môṭ vùng giới haṇ bên trong trang Web, chớ không chiếm cả trang Web. Taị đây khi trang Web bắt đâù load (onload event), IE goị function init() để transform XML rồi assign kết quả
  35. vào property innerHTML của DIV resDOM. Có môṭ method khác ta cũng có thể dùng thay cho transformNode là transformNodeToObject. Sư ̣ khác biêṭ chính giữa hai methods nâỳ là: transformNode: Kết quả của method nâỳ là môṭ tree dưới daṇ g text string, điển hiǹ h là môṭ hồ sơ HTML. Ta có thể cho nó hiển thi ̣ trong môṭ browser hay lưu trữ vào môṭ file. transformNodeToObject: Kết quả của method nâỳ đươc̣ để vào trong môṭ object khác, rồi chính object ấy có thể sẽ đươc̣ chế biến thêm.
  36. Khi ta dùng môṭ trong hai method nói trên, thâṭ ra object nguồn (source object) không câǹ phải là môṭ hồ sơ đâỳ đủ. Nó có thể chỉ là môṭ Node của hồ sơ XML. Nếu nó chỉ là môṭ Node thi ̀ cái XSLT processor xem tâp̣ hơp̣ Node ấy, và các Nodes con cháu của nó như môṭ hồ sơ đâỳ đủ. Tương tư ̣ như vâỵ , môṭ object XSL có thể là môṭ file XSL đâỳ đủ, hay chỉ là môṭ Node bên trong môṭ file XSL. Baṇ có thể tải về order.xml, order.xsl và trang Web có JavaScript taị đây. (cò n tiế p)
  37. Hoc̣ XML Vovisoft © 2000. All rights reserved. Last Updated: 23 Webmaster Dec 2003