XSLT
XSLT
Phạm Hồng Phong - SoICT – HUST
XSLT
Biến ñổi tài liệu XML với XSLT
Chương trình XSLT
Là một tài liệu XML
Chỉ bao gồm các Thẻ: chuyển tài liệu XML
sang
các
dạng
khác
: HTML, XML, PDF …
sang
các
dạng
khác
: HTML, XML, PDF …
Ví dụ:
Tài liệu XML
<San_pham Ten=“Xa phong” Gia=“15.000”>
Tài liệu HTML trên trang Web
Mặ hàng Xà phòng có giá là 15.000 d
2
Xử lý XSLT
Input XML
document
XSLT
Processor
Output
XML
document
XSLT
Template
XSLT
Stylesheet
XSLT
Cấu trúc tổng quát chương trình XSLT
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl= /><xsl:template match="/" >
/* Thân chương trình – tập các lệnh hay các thẻ
xử lý ñể biến ñổi tài liệu XML */
</xsl:template>
</xsl:stylesheet>
4
Ví dụ
Ví dụ biến ñổi XML sang dạng văn bản
<Person Name=“Phạm Hồng Phong" />
=> “Hi các bạn, tên tôi là Phạm Hồng Phong”
<?xml version="1.0" encoding="UTF-8" ?>
<
xsl:stylesheet
version="1.0"
<
xsl:stylesheet
version="1.0"
xmlns:xsl=" /><xsl:output method="text"/>
<xsl:template match="/" >
Hi các bạn, tên tôi là
<xsl:value-of select="/Person/@Name"/>
</xsl:template>
</xsl:stylesheet>
5
Ví dụ
Ví dụ với tài liệu XML
<Items>
<Item Name=“Xa_phong” Cost=“15.000”
Quantity=“2”>
<Item Name=“
Khan_mat
” Cost=“20.000”
<Item Name=“
Khan_mat
” Cost=“20.000”
Quantity=“3”>
</Items>
=> tập tin văn bản có nội dung:
Tổng số tiền mua hàng là 90.000
6
Ví dụ
<?xmlversion="1.0"encoding="UTF-8" ?>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://ww
w.w3.org/1999/XSL/Transform">
<xsl:outputmethod ="text"/>
<xsl:template match="/" >
Tổng
số
tiền
mua
hàng
là
Tổng
số
tiền
mua
hàng
là
<xsl:value-of select="//Item[1]/@Cost *
//Item[1]/@Quantity + //Item[2]/@Cost”*
//Item[2]/@Quantity”/>
</xsl:template>
</xsl:stylesheet>
7
Thực hiện chương trình
Thực hiện chương trình XSLT:
Soạn thảo các tệp tài liệu XML và chương
trình XSLT bằng một trình Editor bất kì
Chạy
chương
trình
:
Chạy
chương
trình
:
• Trên các ứng dụng viết bằng các ngôn ngữ
khác nhau - nhúng vào ứng dụng
• Trên trình duyệt Web để kết xuất thông tin
– Tập tin XML nguồn:
<?xml-stylesheet type="text/xsl" href= đường dẫn tới
tệp XSLT ?>
– Gõ URL tới tệp XML trên trình duyệt
8
So khớp
Mẫu so khớp:
<xsl:template match=“Chuỗi so khớp" >
Các thẻ xử lý
</xsl:template>
Thực hiện so khớp:
<xsl:apply-templates />
Thuộc tính chọn các nút con select có thể
được bỏ qua <=> select =”*”
9
So khớp
<?xmlversion="1.0"encoding="utf-8" ?>
<Order OrderID=“Or003">
<OrderDetail ID=“Od001" >
<Item Name=“Xa phong" />
<Item Name=“Bot giat" />
<Item Name=“Khan mat" />
<Item Name=“
Nuoc
khoang
" />
<Item Name=“
Nuoc
khoang
" />
< /OrderDetail>
….
<OrderDetail ID=“Od001" >
<Item Name=“Xa phong" />
<Item Name=“Bot giat" />
<Item Name=“Khan mat" />
<Item Name=“Nuoc khoang" />
< /OrderDetail>
</Order>
10
So khớp
Kết xuất thông tin về các mặt hàng
<?xmlversion="1.0"encoding="UTF-8" ?>
<xsl:stylesheetversion="1.0"xmlns:xsl="
g/1999/XSL/Transform">
<
xsl:outputmethod
="html" />
<
xsl:outputmethod
="html" />
<xsl:template match="/" >
<xsl:apply-templates select=“Order" />
</xsl:template>
<xsl:template match=“Order”>
<xsl:value-of select=“OrderID”
Các chi tiết các ñơn hàng: <br />
11
So khớp
<xsl:apply-templates select=“OrderDetail" />
</xsl:template>
<xsl:template match=“OrderDetail">
<xsl:value-of select="@ID"/>
<br />
<
xsl:apply
-
templates select=“Item" />
<
xsl:apply
-
templates select=“Item" />
</xsl:template>
<xsl:template match=“Item">
<xsl:value-of select="@Name"/>
<br />
</xsl:template>
</xsl:stylesheet>
12
Trích rút thông tin
Thẻ trích xuất xsl:value-of
Lấy thông tin từ trực tiếp nút : thẻ select
Lấy thông tin từ một nút vào biến qua thẻ
xsl:variable, sau đó mới đưa vào thẻ value-of
Cú pháp lấy thông tin
Từ nút:
<xsl:value-of select=“Đường dẫn Xpath” />
Từ biến:
<xsl:value-of select=“@Biến” />
Tạo một biến
<xsl:variable name=“Tên_biến”
select=“Đường dẫn Xpath” />
13
Trích rút thông tin
Ví dụ tệp XML, tính tiền phải trả
<Items>
<Item Name=“Xa_phong”
Cost=“15.000” Quantity=“2”>
Cost=“15.000” Quantity=“2”>
<Item Name=“Khan_mat”
Cost=“20.000” Quantity=“3”>
</Items>
14
Trích rút thông tin
<?xmlversion="1.0"encoding="UTF-8" ?>
<xsl:stylesheetversion="1.0"xmlns:xsl="
g/1999/XSL/Transform">
<xsl:outputmethod ="text"/>
<xsl:templatematch="/" >
<
xsl:variable
name=“Money1“
<
xsl:variable
name=“Money1“
select="//Item[1]/@Cost" />
<xsl:variable name=“Money2“
select="//Item[2]/@Cost" />
Số tiền phải trả là:
<xsl:value-of select="$Money1 + $Money2"/>
</xsl:template>
</xsl:stylesheet>
15
Biểu thức ñiều kiện
Khi tính toán dữ liệu từ tệp XML nguồn,
các xử lý có thể rẽ nhánh, 2 cách
Thẻ xsl:if: xử lý một điều kiện
Thẻ
xsl:choose
:
xử
lý
nhiều
điều
kiện
Thẻ
xsl:choose
:
xử
lý
nhiều
điều
kiện
Chỉ một điều kiện được thỏa
16
Biểu thức ñiều kiện
Cú pháp thẻ xs:if
<xsl:if test=“Logic Operation" >
/* Các lệnh xử lý*/
</xsl:if>
Biểu thức logic
Toán hạng: các biến, các biểu thức Xpath
Toán tử: các phép tính toán +-*/, phép so
sánh (>,>=,!=, …), phép and, or, not …
17
Biểu thức ñiều kiện
Ví dụ
<?xmlversion="1.0"encoding="UTF-8" ?>
<xsl:stylesheetversion="1.0"xmlns:xsl=" />L/Transform">
<xsl:outputmethod ="text" />
<xsl:template match="/" >
<xsl:variable name=“Cost1" select="/Items/Item[1]/@Cost" />
<
xsl:variable
name=“Cost2" select="/Items/Item[2]/@Cost" />
<
xsl:variable
name=“Cost2" select="/Items/Item[2]/@Cost" />
Mặt hàng giá trị hơn là:
<xsl:if test="$Cost1> $Cost2" >
<xsl:value-of select =" /Items/Item[1]/@Name "/>
</xsl:if>
<xsl:if test="$Cost1 <=$Cost2" >
<xsl:value-of select =" /Items/Item[2]/@Name "/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
18
Biểu thức ñiều kiện
Cú pháp thẻ xs:choose
<xsl:choose>
<xsl:when test=“Logic Operation1 " >
/* Các lệnh xử lý 1*/
</xsl:when>
<xsl:when test=" Logic Operation2 " >
/* Các lệnh xử lý 2*/
/* Các lệnh xử lý 2*/
</xsl:when>
<xsl:otherwise >
/* Các lệnh xử lý khác*/
</xsl:when>
</xsl:choose>
19
Biểu thức ñiều kiện
Tìm mặt hàng có giá trị hơn bằng cách sử
dụng thẻ xsl:choose ?
20
Cấu trúc lặp
Cần lặp lại các lệnh xử lý trên nhiều thẻ
của tệp XML nguồn
Thẻ lặp xsl:for-each
Cú pháp
<xsl:for-each select=“Đường dẫn Xpath ">
/* Các lệnh xử lý mỗi vòng lặp*/
</xsl:for-each>
Các lệnh xử lý có thể sử dụng đường dẫn
tương đối từ nút hiện tại
21
Cấu trúc lặp
Ví dụ ñọc ra thông tin từ tệp XML
<?xml version="1.0" encoding="utf-8" ?>
<KHOA_VIEN Ten=“Viện CNTT&TT">
<Bo_Mon Ten=“Hệ thống thông tin" />
<Bo_Mon Ten=“Công nghệ phần mềm" />
<Bo_Mon Ten=“Truyền thông & Mạng" />
<Bo_Mon Ten=“Khoa học máy tính" />
<Bo_Mon Ten=“Kĩ thuật máy tính" />
</KHOA_VIEN>
22
Cấu trúc lặp
<?xmlversion="1.0"encoding="UTF-8" ?>
<xsl:stylesheetversion="1.0"xmlns:xsl=" />1999/XSL/Transform">
<xsl:outputmethod ="html" />
<xsl:template match="/" >
<xsl:value-of select="/KHOA_VIEN/@Ten"/>
<
br
/>
<
br
/>
Danh sách các Bộ môn: <br />
<xsl:for-each select="//Bo_Mon" >
<xsl:value-of select="@Ten"/>
<br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
23
Hàm
Viết chương trình XSLT với tất cả các thẻ
xử lý ñược ñặt trong một bộ thẻ
<xsl:template>
Chương trình khó đọc, viết, bảo trì
Không tái sử dụng được
Giải pháp: ñóng gói các xử lý nhỏ trong
một ñơn vị - “Hàm” – một bộ thẻ
<xsl:template>
24
Hàm
Khai báo hàm
<xsl:template match=“Đường dẫn Xpath">
/* Các lệnh của Hàm*/
</xsl:template>
Gọi hàm – so khớp nhiều lần(nhiều thẻ)
<xsl:apply-templates select=“Đường dẫn
Xpath" />
25