Lê Quang Lợi
-Email:
Nguyễn Đăng Khoa
-Email:
Nội dung
Làm việc với XSL và XSLT
Làm việc với Xpath
Câu hỏi thảo luận
Lê Quang Lợi- Nguyễn Đăng Khoa
Vài điều về XML
eXtensible Markup Language (XML)
Nền tảng dựa trên thẻ(tag) tự quy định
Cho phép mô tả dữ liệu có cấu trúc và phi cấu trúc
XML có dùng để chứa dữ liệu, hỗ trợ UNICODE
XML không bị giới hạn (có thể tùy biến/mở rộng)
XML là một chuẩn truyền thông trên nền mạng
Lê Quang Lợi- Nguyễn Đăng Khoa
Một tài liệu XML
<?xml version="1.0" encoding="utf-8" ?>
<lophoc>
<! mo ta hoc sinh >
<hocsinh>
<mahocsinh> 001</mahocsinh>
<tenhocsinh> Lê văn Long</tenhocsinh>
<ngaySinh> 10/12/1990</ngaySinh>
<quequan> Khoaichau</quequan>
</hocsinh>
</lophoc>
Lê Quang Lợi- Nguyễn Đăng Khoa
XSL và XSLT
XSL: Extensible Stylesheet Language
XSLT: Extensible Stylesheet Language Tranform
XSL: quy định khuôn dạng dữ liệu của file XML
XSLT: là bộ máy chuyển hỗ trợ chuyển dữ liệu XML
sang HTML hoặc tài liệu XML khác
Trình duyệt, ngôn ngữ hỗ trợ đối tượng thao tác XML
có xây dựng XSLT Engin để chuyển
Lê Quang Lợi- Nguyễn Đăng Khoa
Kiến trúc XSLT
Lê Quang Lợi- Nguyễn Đăng Khoa
Đầu vào:
file XML chứa dữ liệu
File XSL quy định khuôn dạng dữ liệu
Đầu ra dữ
HTML
Giá trị theo kiểu dữ liệu
XSL và XSLT
File data.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="render.xsl"?>
<message>Howdy!</message>
File render.xsl:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0”
xmlns:xsl="
<xsl:template match="/">
<html><body>
<h1><xsl:value-of select="message"/></h1>
</body></html>
</xsl:template>
</xsl:stylesheet>
Lê Quang Lợi- Nguyễn Đăng Khoa
Cách hoạt động của XSLT
Lê Quang Lợi- Nguyễn Đăng Khoa
Tài liệu XML chứa dữ liệu dạng Tree
<xsl:template match="/"> Tìm tới node tương ứng
Template là một luật để tìm các thẻ
<xsl:value-of select="…"/>: Hi n th n i dung c a th ể ị ộ ủ ẻ
XML
Nếu thẻ nào không sánh đúng sẽ không bị thay đổi
Sau khi áp dụng xong thì thay thế bởi dữ liệu mới
Các thành phần trong XSL
Lê Quang Lợi- Nguyễn Đăng Khoa
<xsl:value-of select="XPath expression"/>
<xsl:for-each select="XPath expression">
Text to insert and rules to apply
</xsl:for-each>
<xsl:choose>
<xsl:when test="some condition">
some code
</xsl:when>
<xsl:otherwise>
some code
</xsl:otherwise>
</xsl:choose>
Ví dụ cho cấu trúc for
Lê Quang Lợi- Nguyễn Đăng Khoa
<ul>
<xsl:for-each select="//book">
<li> <xsl:value-of select="title"/> </li>
</xsl:for-each>
</ul>
<ul>
<xsl:for-each select="//book">
<xsl:sort select="author"/>
<li> <xsl:value-of select="title"/> by
<xsl:value-of select="author"> </li>
</xsl:for-each>
</ul>
XPath
XPath là cú pháp/phương pháp lấy dữ liệu từ file XML
Xpath diễn tả đường đi trong tài liệu XML(Path in XML )
Xpath gần giống URL hoặc Paht trong hệ điều hành
Xpath như là ngôn ngữ lập trình cơ bản với
Hàm: count(elem), name() , contains(arg1, arg2)
Toán tử: +,==,-,*, /, DIV,MODE ….
Biểu thức toán học (chuỗi)
Xpath kết hợp với XSL để thao tác với file XML tốt hơn
Xpath và XSLT cung cấp khả năng tự động thao tác dữ liệu XML
Hỗ trợ các trình duyệt, ngôn ngữ lập trình thao tác XML = DOM
Lê Quang Lợi- Nguyễn Đăng Khoa
Lựa chọn các node trong XPath
Lê Quang Lợi- Nguyễn Đăng Khoa
<library>
<book>
<chapter/>
<chapter>
<section>
<paragraph/>
<paragraph/>
</section>
</chapter>
<chapter/>
</book>
<book/>
</library>
•
//chapter[2]/self::*
•
//chapter[2]/preceding::*
•
//chapter[2]/following::*
•
//chapter[2]/ancestor::*
•
//chapter[2]/descendant::*
Hàm trong Xpath
Lê Quang Lợi- Nguyễn Đăng Khoa
<?xml version='1.0'?>
<?xml-stylesheet
type="text/xsl"
href="union.xsl"?>
<root>
<x>green</x>
<y>
<x>blue</x>
<x>blue</x>
</y>
<z>
<x>red</x>
<x>red</x>
</z>
<x>green</x>
</root>
Quy ước đường đi trong XPath
Lê Quang Lợi- Nguyễn Đăng Khoa
H i u hành ệ đ ề Trong XML XPath:
/ = the root directory /library = the root element (if named
library )
/users/dave/foo = the file
named foo in dave in users
/library/book/chapter/section = every
section element in a chapter in every
book in the library
. = the current directory . = the current element
= the parent directory
= parent of the current element
/users/dave/* = all the files
in /users/dave
/library/book/chapter/* = all the
elements in /library/book/chapter
foo = the file named foo in
the current directory
section = every section element
that is a child of the current
element