You are on page 1of 10

Aptech FPT

Bài 3: CSS và XSL


A. CSS
1 <?xml-stylesheet
1. Cơ bản về CSS
2 type = "MIME-type" 3
1. Cú pháp cho khai báo CSS
- Khai báo stylesheet là CSS cho một tài liệu XML là một PI có cú
pháp sau: bắt đầu bằng một delimiter chỉ thị xử lý (1). PI này bao gồm 4 href = "url-of-stylesheet"
vài thuộc tính, thường là type và href. type (2) được thiết lập kiểu
MIME (3) của stylesheet, (với CSS là text/css) còn href (4) là URL
của stylesheet (5). Khai báo kết thúc bởi delimiter (6). 6 ?> 5
- Ví dụ:
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="bookStyle.css"?>
<book>
<title>Tom Swift's Aerial Adventures</title>
<chapter id="1" >
<title>The Dirigible</title>
...

2. Cú pháp cho CSS


- Một CSS bao gồm một selector (1) phải so trùng với element và một khai báo
(2) mô tả kiểu. Khai báo này là danh sách các cặp tên – trị (3), trong đó mỗi 1 selector
thuộc tính (4) được gán cho một trị (5) bằng dấu “:”
- CSS cũng có cú pháp cho chú thích. Chú thích được bao bởi cặp /* và */ và 2 {
như vậy sẽ bỏ qua khi xử lý CSS. property1 : value1 ;
- Ký tự space dùng cho việc cung cấp một danh sách trị cho thuộc tính.
3
- Ví dụ:
/* A simple example */ property2 : value2 ;
addressbook {
display-type: block; }
font-family: sans-serif;
font-size: 12pt; 4 5
background-color: white;
color: blue;
}

1 3 4 2. So trùng element
- Xem ví dụ trên, luật trên nói rằng: “Với mỗi element
addressbook, hiển thị nó như một khối, thiết lập font là
element-name [att1 = "val1"] [att2 = "val2"]
article display-type: block;
font-family:sans-serif;
font-size: 14pt;
2 background-image: stripes.jpg;
sans-serif với kích thước font 12pt, thiết lập màu nền trắng color: blue;
và màu chữ xanh”. Như vậy element addressbook được
INHERITED
nhận ra bằng cách so trùng với selector tương ứng.
- Cú pháp cho một selector như sau: một tên element (1) section display-type: block;
theo sau bởi vài thuộc tính (2) trong dấu ngoặc vuông (tùy margin-top: 5mm;
margin-bottom: 5mm;
chọn), bên trong chứa một thuộc tính (3) và trị của nó (4). font-size: 12pt;
Ví dụ: Selector sau sẽ so trùng với element có tên planet
và có attribute atmosphere: INHERITED
planet[atmosphere]
para display-type: block;
II. Các thuộc tính (Property) margin-top: 2mm;
margin-bottom: 2mm;

1
Aptech FPT

1. Sự thừa kế thuộc tính


- Các thuộc tính CSS có thể chuyển xuống (cascading) từ element container (element chứa các element khác xuống con
của của nó, làm đơn giản việc thiết kế. Ví dụ có thể thiết lập font cho document element và dùng suốt tài liệu. Khi cần
thay đổi font tại một element con nào đó, chỉ cần chèn thuộc tính mới cho element tại điểm đó để che đi thuộc tính toàn
cục.
- Ví dụ (hình bên): Các thuộc tính font-family và color được thừa kế từ article đến para. Thuộc tính font-size
được session định nghĩa lại và che đi thuộc tính thừa kế từ article, para sẽ thừa kế thuộc tính này từ section.
- Một số thuộc tính không thừa kế được như thuộc tính background-image.

2. Đơn vị đo
- Đơn vị đo tuyệt đối (absolute): là các đơn vị đo lường chuẩn: milimeter (mm), centimeter (cm), inche (in) hoặc các đơn
vị đo dùng trong ngành in: point (pt) (1/72 inches) và pica (pc) (12pt).
- Đơn vị đo quan hệ (relative): tính với kích thước của element chứa nó, tính theo %, hoặc tính bằng em (1 em bằng kích
thước nguyên thủy, ví dụ font xuất hiện với font 12pt thì 1 em = 12pt).
- Ví dụ:
b { font-size: 200% }

3. Kiểu hiển thị


- Thuộc tính display có 3 kiểu hiển thị:
• block: hình chữ nhật cô lập văn bản với văn bản trước và sau nó, ví dụ đoạn văn bản, nhãn, section tài liệu.
• inline: nội dung không ngắt dòng, ví dụ từ khóa, siêu liên kết.
• none: CSS processor sẽ bỏ qua các đoạn này.

4. Thuộc tính khối


- Các thuộc tính khối mô tả trong một hình chữ nhật vô hình ngăn cách nội
dung của khối với các khối lân cận. Bounding Box
a) Margin (lề)
- Margin là khoảng cách 4 bên giữa khối và các khối lân cận. Có 4 thuộc tính có Margin-top
thể thiết lập: margin-left, margin-right, margin-top, margin-bottom.
- Có thể dùng thuộc tính margin để thiết lập tắt, theo sau margin: là một danh

Margin-right
This is some text
Margin-left

sách trị cách nhau bằng space. 1 trị: cho tất cả 4 margin, 2 trị: trên-dưới và trái- inside a block. This
phải, 3 trị: trên, trái-phải, dưới. Trị có thể có dấu âm, để nội dung tràn ra ngoài is some text inside
khối. a block.
- Ví dụ:
para { margin-left: 10em; margin-right: 10em; Margin-bottom
margin-top: 5% }
para { margin: 5% 10em 0 } Padding

b) Border (viền)
- Có ba tham số để định nghĩa thuộc tính border.
• width: độ dày mỏng của viền, bằng đơn vị đo tuyệt đối hay tương đối, hoặc một trong ba trị: thin (mỏng),
medium (trung, mặc định), thick (dày).
• style: kiểu viền, có 8 trị: solid (liền), dashed (đứt), dotted (chấm liên tục), groove (khắc chìm), ridge
(răng cưa), double (đường đôi), inset (trong dày ngoài mỏng), outset (trong mỏng ngoài dày).
• color: màu viền.
- Ví dụ:
border: thin solid green;
border: red groove thick;
border: inset blue 12pt;

c) Padding (đệm)
- Padding là khoảng cách giữa viền và khối, còn gọi là lề trong. Có 4 thuộc tính: padding-top, padding-bottom,
padding-left và padding-right, hoặc dùng chung một thuộc tính padding. Cách thiết lập tương tự margin.

2
Aptech FPT

d) Alignment và indentation (cân chỉnh và thụt đầu dòng)


- Dùng thuộc tính text-align để cân chỉnh các dòng trong một đoạn. Có các trị:
left: canh lề trái, mặc định
right: canh lề phải.
center: canh giữa.
justify: canh đều hai lề.
- Dùng thuộc tính text-indent để thụt đầu dòng dòng đầu tiên của khối. Có thể dùng trị
âm (hanging, dòng đầu nhô ra như tự điển), đơn vị đo tuyệt đối hoặc tính bằng % chiều
ngang của khối.

5. Thuộc tính văn bản


a) Font
- Thuộc tính font-family khai báo một danh sách các font được tham chiếu, cách nhau
bởi dấu phẩy. Bắt đầu bởi font chỉ định và kết thúc bởi font chung nhất, danh sách liệt kê
các font theo ưu tiên sử dụng. Một số lớp font chung trong hình bên:
- Tên font có dấu space phải đóng bằng cặp dấu nháy. Ví dụ:
font-family: Palatino, "Times New Roman", serif;
font-family: "BT Humanist 521", Palatino, serif;

b) Kích thức Font


- Kích thước font được xác định bởi thuộc tính font-size. Thường dùng đơn vị đo tuyệt đối là point, hoặc đơn vị đo
tương đối (% hoặc ems). Ngoài ra có thể dùng các từ khóa nửa tuyệt đối (semi-absolute) như sau: xx-small, x-small,
small, medium, large, x-large, xx-large. Kích thước sau lớn 1.2 lần so với kích thước trước. Ngoài ra còn các từ
khóa tương đối: larger và smaller (tăng giảm theo một tỷ lệ nào đó).

c) Chiều cao dòng và hiệu chỉnh kích thước font


- Thuộc tính line-height ảnh hưởng chiều cao của font cộng với khoảng cách trên nó, nói cách khác là ảnh hưởng
khoảng cách giữa các dòng. Ví dụ:
para1 { line-height: 1 }
para2 { line-height: 2 }
para3 { line-height: 1.5 }
- Thuộc tính font-size-adjust có thể dùng để biến đổi kích thước của font trong thuộctính font-family. Trị tỷ lệ là
tỷ lệ x-height của kích thước font.

d) Style (kiểu) và weight (dạng) font


- Thuộc tính font-style cho phép tăng chú ý đến văn bản. Có 4 thiết lập có thể: normal (bình thường), italic
(nghiêng), oblique (lệch), inherit (thừa kế thuộc tính từ element cha).
- Thuộc tính font-weight điều khiển độ đậm nhạt của font. Có các trị: light (mỏng), normal (bình thường), bold
(đậm), lighter (giảm weight 1 cấp), bolder (tăng weight 1 cấp). Có 9 cấp tăng giảm.

e) Color
- Màu sắc là một thuộc tính quan trọng của văn bản. Có hai thuộc tính về màu: color dùng cho màu chữ và
background-color cho màu nền.
- Trị có thể là một tên màu được định nghĩa trước, công thức rgb() với trị % hoặc 0-255, chuỗi # với các màu rgb có trị từ
00 đến FF. Ví dụ:
navy rgb(0%,0%,65%) rgb(0,0,160) #0000a0

6. Text được sinh


- Tự động sinh text là một khả năng quan trọng của stylesheet. Dạng chung của sinh text tự động là:
content: string1 string2 ...
Text phải đóng trong cặp nháy kép. Một số hàm sinh text:
• url( locator ) mở một file có URL chỉ bởi locator và chèn nội dung của file đó vào điểm đặt hàm này.
• attr( name ) chèn trị của một thuộc tính với tên name.
• counter( name ) đọc trị của một bộ đếm nội với nhãn name và chuyển nó thành text.

3
Aptech FPT

B. XSL

1) Khái niệm
- XSL tạo bởi các phần sau:
• XSLT (XSL Transformation), ngôn ngữ dựa trên XML, cho phép biến đổi một tài liệu XML thành một tài liệu
khác: XML, WML, HTML, …
• XSL-FO (XSL Formatting Objects), ngôn ngữ dùng mô tả các tài liệu XML để hiển thị.
- XSLT không phải là ngôn ngữ lập trình mệnh lệnh mà thuộc dạng khai báo. Ta không chỉ định cho máy cách mà ta
muốn thực hiện, ta chỉ khai báo nội dung mà ta muốn máy thực hiện, với sự hỗ trợ của các template.
- XSLT dùng các biểu thức XPath. XPath (XML Path) là ngôn ngữ không dùng cú pháp XML, dùng để truy xuất các
phần khác nhau (element, attribute, …) của cây nguồn tạo từ tài liệu XML gốc. Ta dùng các biểu thức XPath để chỉ định
một đường dẫn vị trí chỉ chính xác đến nơi cần đến trong cây nguồn.
- XSLT cho ta hai cách gom nhiều stylesheet vào một:
• xsl:import : template trong stylesheet gốc luôn chồng lên template của stylesheet được “import” vào, không
quan tâm đến độ ưu tiên, tạo thành một cây import.
Ví dụ: import xsl1.xsl, xsl2.xsl, xsl3.xsl vào root.xsl; sau đó import first.xsl và second.xsl
vào xsl1.xsl. Ta có cây import:
root.xsl

xsl1.xsl xsl2.xsl xsl3.xsl

first.xsl second.xsl
• xsl:include : “include” một stylesheet nghĩa là chèn nội dung của nó trực tiếp vào stylesheet đích, như là một
phần của stylesheet đích. Element <xsl:include> có attribute href, lưu giữ URI của stylesheet được “include”
vào.
- Khai báo dùng stylesheet XSL cho một tài liệu XML như sau:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="products.xsl"?>
<productdata>
<!-- Nội dung tài liệu XML -->
</productdata>

2) XPath
- XPath xem tài liệu XML gốc như một cây nguồn với mỗi node là một thành phần bất kỳ (element, attribute, PI, ...).
XSLT Processor sẽ dùng cơ chế so trùng node duyệt với biểu thức XPath để xác định đúng node cần đến.

a) Đường dẫn vị trí


- Đường dẫn vị trí là một biểu thức XPath sẽ chỉ nơi đến trong tài liệu. Đường dẫn vị trí có thể tuyệt đối (bắt đầu từ root
element) hoặc tương đối (bắt đầu từ gốc tài liệu – document root, là nơi ta bắt đầu).
XPath Ví dụ Giải thích
<xsl:template match="/">
Gốc tài liệu (document root) ảo, thường
/
trùng với root element.
<xsl:template match="*">
Ký tự đại diện, so trùng với bất kỳ
element nào trong tài liệu XML.
*
<xsl:template match="@*">
So trùng với bất kỳ attribute nào trong tài
liệu XML.
element <xsl:template match="customer"> So trùng với tên của element customer.
<xsl:template So trùng với element firstname hoặc
Element1| element2|… match="firstname|lastname"> lastname.
<xsl:template So trùng element name chứa trị John, là
Element[element] match="customer[name='John']"> con element customer.

4
Aptech FPT

<xsl:template So trùng attribute custid của element


Element[@attribute] match="customer[@custid]"> customer.
Element[@attribute=‘value’ <xsl:template So trùng tất cả các element customer,
] match="customer[@custid='1']"> và có attribute custid có trị bằng 1.
<xsl:template So trùng element firstname là con của
parent/child match="/customer/firstname"> customer, là con của gốc tài liệu.
<xsl:template So trùng element address có element
match="customerdetails//address"> customerdetail là tổ tiên.
Ancestor//child
<xsl:template match="//address"> So trùng mọi element address, mọi
<xsl:template match="//@id"> attribute id có trong tài liệu.

b) Các hàm XPath


- Dùng trả về vị trí mà không thể so trùng bằng các mối quan hệ cha/con và element/attribute bình thường.
- Một số hàm XPath:
+ Các hàm xử lý node:
• name(): trả về tên một vị trí. Ví dụ: kết xuất tên mọi element là con của element product:
<xsl:template match="product">
<xsl:for-each select="*">
<p><xsl:value-of select="name()" /></p>
</xsl:for-each>
</xsl:template>
• node(): trả về chính node.
• processing-instruction(): trả về các PI. Hàm này có thể có tham số. Ví dụ: Kết xuất nội dung mọi PI dạng
<?AppName stuff?>
<xsl:template match="processing-instruction( 'AppName' )">
<xsl:value-of select="." />
</xsl:template>
• comment(): dùng để trả về các chú thích. Ví dụ: Kết xuất văn bản trong mọi chú giải.
<xsl:template match="comment()">
<xsl:value-of select="." />
</xsl:template>
• text(): trả về nội dung PCDATA một node, kết quả chính xác hơn dùng <xsl:value-of>. Ví dụ: với tài liệu:
<parent>This is some text.
<child>And this is some more text</child>
</parent>
Dùng text():
<xsl:template match="parent">
<xsl:value-of select="text()" />
</xsl:template>
Cho kết quả: This is some text.
Khi dùng <xsl:value-of>:
<xsl:template match="parent">
<xsl:value-of select="." />
</xsl:template>
Cho kết quả:
This is some text.
And this is some more text
+ Các hàm định vị: với các node thuộc về một tập hợp node (ví dụ các element cùng tên), ta dùng các hàm xác định hoặc
so trùng vị trí của node đó trong tập hợp.
• position(): tìm vị trí của một node trong tập hợp node. Ví dụ: so trùng element node thứ hai trong tài liệu:
<nodes>
<node>One</node>
<node>Two</node>
</nodes>
Dùng:

5
Aptech FPT

<xsl:template match="/nodes/node[position()=2]">
hoặc tắt hơn:
<xsl:template match="/nodes/node[2]">
• last(): trả về node cuối trong tập hợp node. Ví dụ:
<xsl:template match="/nodes/node[position()=last()]">
• count(): trả về số lượng các node trong tập hợp node. Ví dụ: số lượng các node customer:
<xsl:value-of select="count(customer)" />
+ Các hàm số:
• number():
• sum():
+ Các hàm bool:

+ Các hàm chuỗi:


• string():
• string-length():

2) XSLT Processor
- XSLT Processor được đóng gói theo Microsoft XML parser (MSXML). MSXML dùng parse các tài liệu XSLT và tạo
nên một cấu trúc cây (XSLT Tree) trên cơ sở các element và các attribute trong tài liệu XSLT
- XSLT Processor của MSXML parser sẽ lấy thông tin biến đổi chứa trong XSLT stylesheet (từ cây XSLT), thông tin này
chính là sự kết hợp các template với dữ liệu tìm thấy trong tài liệu XML gốc (từ cây nguồn), để xây dựng một cây kết
quả. Cây kết quả này được xuất (render) đến vài đích như browser (HTML), cell phone (WML), …
MSXML parser

XSLT style XSLT tree


sheet

XSLT
Processor Result tree

XPath

XML document Source tree


sheet

3) Các element của XSLT


- XSLT cung cấp một số element cho việc chọn và định dạng dữ liệu:
a) Element <xsl:stylesheet>
- Chứa chỉ dẫn để biến đổi tài liệu XML, một khai báo được thêm vào file XSLT để nói cho browser biết đây là một file
stylesheet. Khai báo stylesheet này có cú pháp như sau:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://www.myxslt.org/extentions"
extension-element-prefixes="ext"
version="1.0">
<!—các element khác của XSLT -->
</xsl:stylesheet>
- Element stylesheet là root element cho tất cả các stylesheet XSLT. Tiền tố xsl trong cú pháp trên chứa một tham
chiếu đến namespace-URI cho XSLT: "xmlns:xsl="http://www.w3.org/1999/XSL/Transform". Dùng
namespace-URI này để chắc rằng các element và attribute dùng trong stylesheet XSLT được dùng theo chuẩn của WC3.

b) Element <xsl:value-of>
- Element rỗng này lấy trị của element hay attribute, được chỉ định bởi attribute select, từ cây nguồn chèn vào template
trong cây kết quả.

6
Aptech FPT

- Cú pháp như sau:


<xsl:value-of select="element_name/attribute_name" />
- Ví dụ: Chèn trị của element productname và trị của attribute category vào cây kết quả:
<xsl:value-of select="productname " />
<xsl:value-of select="@category " />

c) Element <xsl:for-each>
- Element này dùng xử lý một số node (so trùng bởi biểu thức XPath của attribute select) giống nhau trong cây nguồn.
- Cú pháp như sau:
<xsl:for-each select="pattern">
[các action cần thực hiện]
</xsl:for-each>
- Attribute select của element for-each cho phép chỉ định (thông qua biểu thức XPath) các element hay attribute mà
action cần thực hiện trên chúng. Các action trong thân element for-each sẽ áp dụng cho từng node được chọn. Ví dụ:
Với mỗi element product, con của element productdata, hiển thị nội dung các element lồng productname và price
bằng <xsl:value-of>, element font dùng hiển thị tên sản phẩm màu xanh.
<xsl:for-each select="productdata/product">
<font color="blue"><xsl:value-of select="productname" /></font>
<xsl:value-of select="price">
</xsl:for-each>
- Element for-each có thể xuất hiện trong các element như: <xsl:template>, <xsl:for-each>, <xsl:if> và
<xsl:otherwise>.

d) Element <xsl:sort>
- Element sort dùng để sắp xếp dữ liệu trên cơ sở trị được gán cho các element và attribute. Element sort không có
element con, nó luôn dùng như element con của element <xsl:for-each> hoặc <xsl:apply-templates>. Cú pháp
như sau:
<xsl:sort select="expression" order="ascending|descending"
case-order="upper-first|lower-first"
data-type="text|number|qname" />
- Các attribute của element này được giải thích trong bảng sau:
Attribute Trị có thể Giải thích
select expression Biểu thức XPath dùng so trùng.
order ascending, descending Chiều sắp xếp, mặc định là ascending.
case-order upper-first, lower-first Sắp xếp với chữ hoa bắt đầu hay chữ thường bắt đầu.
text, number, qname
Kiểu dữ liệu sắp xếp, có thể là text, number hoặc một
datatype
kiểu do người dùng định nghĩa. Mặc định là text.
- Ví dụ: Sắp xếp giảm element product theo element con price khi xuất:
<xsl:for-each select="product">
<xsl:sort select="price" data-type="number" order="descending" />
<xsl:value-of select="productname">
<xsl:value-of select="cover_color">
</xsl:for-each>

e) Element <xsl:text>
- Cho phép sinh ra chuỗi text hằng khi xuất, có thể dùng để hiển thị nhãn. Ví dụ để hiển thị nhãn “Product Name”, dùng:
<xsl:text>Product Name: </xsl:text>

f) Ví dụ:
- Ví dụ sau minh họa cách dùng các element thảo luận ở trên để hiển thị thông tin lưu trong products.xml:
 products.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="products.xsl"?>
<productdata>
<product proid="P001" category="Toy">

7
Aptech FPT

<productname>Mini Bus</productname>
<description>This is a toy for children aged 4 and above</description>
<price>75</price>
<quantity>54</quantity>
</product>
<product proid="P002" category="Toy">
<productname>Barbie Doll</productname>
<description>This is a toy for children in the age group of 5-10</description>
<price>20</price>
<quantity>200</quantity>
</product>
</productdata>
 products.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Bắt đầu xử lý tài liệu từ root element -->
<xsl:template match="/">
<!-- Với mỗi element "productdata/product", thực hiện tác vụ -->
<xsl:for-each select="productdata/product">
<!-- Sắp xếp giảm theo element con "price", xem element "price" có kiểu number -->
<xsl:sort select="price" data-type="number" order="descending" />
<li>
<!-- Hiển thị nhãn, còn trị thì theo attribute "proID" -->
<font face="verdana" color="blue">
<b><xsl:text>Product ID: </xsl:text></b>
</font>
<font face="verdana" color="red"><xsl:value-of select="@proid" /></font>
<!-- Do well-formed nên tag br của HTML phải có tag đóng -->
<br />
<font face="verdana" color="blue">
<b><xsl:text>Product Name: </xsl:text></b>
</font>
<font face="verdana" color="red">
<xsl:apply-templates select="productname" />
</font>
</li>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
 Với file XSL khác products01.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="0" cellspacing="1">
<tr bgcolor="pink">
<td>Product ID</td>
<td>Product Name</td>
</tr>
<xsl:for-each select="productdata/product">
<tr bgcolor="cyan">
<td><xsl:value-of select="@proid" /></td>
<td><xsl:value-of select="productname" /></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

8
Aptech FPT

<xsl:template>
ProductID Product Name

P001 Mini Bus


template <xsl:for-each>
P002 Barbie Doll

<xsl:value-of>

source tree
4. Các luật của XSLT Template
- XSLT cho phép định nghĩa các luật template (template rule) cho việc kết xuất cây kết quả từ dữ liệu của cây nguồn.
Luật template có hai phần:
• Một template pattern (mẫu) chỉ định một node trong cây gốc nhờ sự hỗ trợ của XPath.
• Một template action hay code xử lý, mô tả việc kết hợp dữ liệu của node trong cây gốc với template, như vậy kết
quả xuất biến đổi theo định dạng của templates.
- XSLT dùng hai element chính để tạo luật template:
a) Element <xsl:template>
- Dùng định nghĩa các template tạo thành stylesheet định dạng kết xuất. Cú pháp như sau:
<xsl:template match="pattern"
name="template_name"

>
[một action]
</xsl:template>
- Attribute match chỉ rõ pattern XPath dùng để so trùng khi tìm trên cây nguồn. Pattern này là một kiểu node do biểu thức
XPath chỉ đến.
- Nếu không chỉ định một template, XSLT sẽ cung cấp một template ngầm định, đơn giản áp dụng mọi template khác tồn
tại. Định nghĩa như sau:

b) Element <xsl:apply-templates>
- Được dùng từ trong một template để gọi các template khác để chỉ dẫn cho XSLT processor tìm một template tương ứng
và thực hiện các tác vụ chỉ định trên từng element được chọn. Cú pháp như sau:
<xsl:apply-templates [select="pattern"]>
- Attribute select là tùy chọn và dùng để chỉ ngữ cảnh mà template sẽ được thực hiện. Trị mặc định cho attribute này là
hàm XPath node(), nghĩa là template sẽ được áp dụng cho con của node hiện tại.

c) Ví dụ:
- Ví dụ sau hiển thị products.xml bằng hai element trên:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Bắt đầu xử lý tài liệu từ root element -->
<xsl:template match="/">
<!-- Áp dụng template riêng của "productdata/product" -->
<xsl:apply-templates select="productdata/product" />
</xsl:template>

<!-- Template riêng của "productdata/product" -->


<xsl:template match="productdata/product">
<font face="verdana" color="green">
<!-- Áp dụng template mặc định cho tất cả các con
của "productdata/product" -->
<li type="square"><xsl:apply-templates /></li>
</font>
</xsl:template>
</xsl:stylesheet>

c) Xử lý template

9
Aptech FPT

- Lưu đồ sau mô tả cách XSLT xử lý template:


Start

Đọc template từ
tài liệu XSLT

Định vị các node cho với template


đã chỉ định trong cây source

Thực hiện các action cho


trong template trên node

Yes
Còn template
không?

No

Hiển thị cây


kết quả

End

C. So sánh CSS với XSLT


- CSS dùng xác định thể hiện trực quan của trang. XSLT dùng chuyển đổi tài liệu XML.
CSS XSLT
Sử dụng đơn giản và thích hợp với các tài liệu đơn giản. Sử dụng phức tạp.
Không thể sắp xếp lại, thêm, xóa hoặc thực hiện các tác vụ Có thể sắp xếp lại, thêm, xóa element một khi nó nhận thấy
trên element. được cấu trúc của tài liệu XML.
Không có các cấu trúc điều khiển. Không tính toán và lưu Có các cấu trúc điều khiển. Có thể dùng các biến để lưu trữ
trữ các trị vào biến. các trị.
Không cần đến cây thể hiện tài liệu. Cần một cây (XSLT tree) thể hiện tài liệu.
Không dùng cú pháp XML, dùng cú pháp riêng. Dùng cú pháp XML.

10

You might also like