Tải bản đầy đủ (.pdf) (33 trang)

Giáo án - Bài giảng: CÔNG NGHỆ XML VÀ ỨNG DỤNG- XPATH &XLST

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (705.59 KB, 33 trang )

XPATH & XSLT
Công nghệ XML và Ứng dụng:
/
Đại học Khoa học Tự Nhiên
Khoa Công nghệ Thông tin
Nội dung
XPATH
- Các biểu thức XPATH thông dụng
- Axes
XSLT
Lập trình (C#)
Nội dung
XPATH
- Là các biểu thức dùng để truy xuất đến một hoặc
nhiều thẻ trong tài liệu XML
- Được sử dụng trong XSLT để chuyển đổi cấu trúc
nội dung tài liệu XML
XPATH
XPATH: Cú pháp cơ bản
/: Đường dẫn tuyệt đối bắt đầu từ node gốc của tài liệu
đến 1 node cụ thể
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
</AAA>

- /AAA: nút gốc
- /AAA/BBB: nút BBB là con của AAA


- /AAA/DDD/CCC: CCC – con DDD – con
AAA (gốc)
//: Nút ở độ sâu bất kì
//CCC: nút CCC ở độ sâu bất kì
XPATH
XPATH: Cú pháp cơ bản
<AAA>
<BBB>
<CCC/>
<BBB>
<CCC/>
</BBB>
</BBB>
</AAA>

- /AAA/*: Tất cả các nút con trực tiếp của AAA
*: Chọn tất cả các node với tên bất kỳ
-/*/BBB: Tất cả các nút BBB ở cấp thứ 2
( node con trực tiếp của node gốc )
//*: TẤT CẢ CÁC NODE
XPATH
XPATH: Cú pháp cơ bản
<AAA>
<BBB/>
<BBB/>
<BBB>
<CCC>
content
</CCC>
</BBB>

<BBB/>
</AAA>

- /AAA/BBB[1]: Nút BBB thứ 1 (con của AAA)
[ ]: Truy xuất đến các node theo thứ tự nào đó hoặc theo chỉ mục.
Ngoài ra, có thể dùng để chỉ định biểu thức điều kiện chọn lựa node
- /AAA/BBB[2]: Nút BBB thứ 2 (con của AAA)
- /AAA/BBB[last()]: Nút BBB cuối cùng
- /AAA/BBB[CCC=“content”]: Nút BBB thứ
3 (có nút con CCC với nội dung là content )
XPATH
XPATH: Cú pháp cơ bản
<AAA>
<BBB id=“b1”/>
<BBB id=“b2”/>
<CCC name=“ccc”/>
<CCC/>
</AAA>

- /AAA/BBB[@id]:
@: Truy xuất đến thuộc tính
- /AAA/CCC[@name=“ccc”]:
- /AAA/CCC[@*]:
Những node BBB có thuộc tính id
Những node CCC có giá trị thuộc tính
name = ccc
Những node CCC có thuộc tính
- /AAA/CCC[not(@*)]: Những node CCC KHÔNG có thuộc tính
XPATH
XPATH: Cú pháp cơ bản

<AAA>
<BBB>
<DDD/>
<DDD/>
<BBB/>
<CCC>
<DDD/>
<CCC/>
</AAA>

- //*[count(DDD)=2]:
count: hàm đếm
- //*[count(*)=1]:
Tất cả các node có đúng 2 thẻ con DDD
Tất cả các node có đúng 1 thẻ con (tên
thẻ con là gì cũng được)
XPATH
XPATH: Cú pháp cơ bản
<AAA>
<BBB>
<DDD/>
<BBB/>
<ECC>
<EEE/>
<ECC/>
<CFB/>
</AAA>

- //*[name()=„DDD‟]:
name(): Lấy tên thẻ, starts-with(), contains(): xử lý chuỗi

- //*[starts-with(name(), „E‟)]:
- //*[contains(name(), „B‟)]
Những node có tên là DDD
Những node có tên bắt đầu bằng „E‟
Những node mà tên có chứa „B‟
string-length(): chiều dài chuỗi
- //*[string-length(name())=3]
Những node có chiều dài tên thẻ là 3
XPATH
XPATH: Cú pháp cơ bản
<AAA>
<BBB>
<DDD/>
<DDD>
</EEE>
</DDD>
</BBB>
</AAA>

Chọn ra tất cả thẻ “con cháu” của
BBB ?
child:: : Chọn tất cả node con của node hiện thời
XPATH
XPATH: Axis – dùng để chọn các node trong mối quan hệ
với node hiện thời
<AAA>
<BBB>
<DDD/>
<BBB/>
<ECC>

<EEE/>
<ECC/>
<CFB/>
</AAA>

- /AAA/child::ECC
/AAA/ECC
- //BBB/child::*
/AAA/BBB/DDD
XPATH
XPATH: Axis

<AAA>
<BBB>
<DDD>
<EEE/>
</DDD>
</BBB>
</AAA>

descendant:: : Tất cả các thẻ “con cháu”

<AAA>
<BBB>
<DDD>
<EEE/>
</DDD>
</BBB>
</AAA>


/AAA/child::* /AAA/descendant::*
descendant-or-self:: = descendant:: + context node
XPATH
XPATH: Axis
parent:: : Thẻ cha
<AAA>
<BBB>
<DDD/>
<BBB/>
<ECC>
<EEE/>
<ECC/>
<CFB/>
</AAA>

- //BBB/parent::*
Thẻ cha của BBB
- //EEE/parent::ECC
Thẻ cha của EEE, tên node cha là ECC
XPATH
XPATH: Axis

<AAA>
<BBB>
<DDD>
<EEE/>
</DDD>
</BBB>
</AAA>


ancestor:: : Tất cả các thẻ “cha ông”

<AAA>
<BBB>
<DDD>
<EEE/>
</DDD>
</BBB>
</AAA>

/AAA/BBB/DDD/EEE/parent::* /AAA/BBB/DDD/EEE/ancestor::*
ancestor-or-self:: = ancestor:: + context node
following-sibling:: : Tất cả các thẻ “em” cùng cấp với node hiện hành
XPATH
XPATH: Axis
preceding-sibling:: : Tất cả các thẻ “anh” cùng cấp với node hiện hành

<AAA>
<BBB>
<DDD/>
<EEE/>
<FFF/>
<GGG/>
</BBB>
</AAA>

//EEE/following-sibling::*

<AAA>
<BBB>

<DDD/>
<EEE/>
<FFF/>
<GGG/>
</BBB>
</AAA>


<AAA>
<BBB>
<DDD/>
<EEE/>
<FFF/>
<GGG/>
</BBB>
</AAA>

//EEE/preceding-sibling::*
XPATH
XPATH: Axis
following:: : Tất cả các thẻ có thẻ mở xuất hiện sau thẻ đóng của
thẻ hiện hành
preceding::: Tất cả các thẻ có thẻ đóng xuất hiện trước thẻ mở của thẻ
hiện hành
//BBB/following::*

<AAA>
<BBB>
<DDD/>
</BBB>

<CCC>
<EEE/>
</CCC>
</AAA>

//EEE/preceding::*

<AAA>
<BBB>
<DDD/>
</BBB>
<CCC>
<EEE/>
</CCC>
</AAA>

XPATH
XPATH: Axis
<AAA>
<BBB>
<DDD/>
</BBB>
<CCC>
<EEE>
<FFF/>
</EEE>
<GGG/>
</CCC>
</AAA>


- //EEE/ancestor::*
- //EEE/descendant::*
- //EEE/following::*
- //EEE/preceding::*
- //EEE/self::*
5 axis trên tạo thành 5 phân
hoạch của tài liệu xml
Không overlap nhau
“Or” ( | ) lại sẽ cho kết quả là
tất cả các node của tài liệu
Nội dung
XPATH
- Các biểu thức XPATH thông dụng
- Axes
XSLT
Lập trình (C#)
XSLT
XSLT:
• eXtensible Stylesheet Language Transformation
• Sử dụng các khuôn mẫu (template) để biến đổi cây
nguồn (source tree) thành cây đích (result tree)
• XSLT chuyển đổi XML thành HTML, PDF, ASCII text,
RTF, XML…
• XSLT sử dụng cú pháp XML
• Cách thức hoạt động
• Chương trình sẽ duyệt tài liệu xml (duyệt cây)
• - Với mỗi node khớp với khuôn mẫu định nghĩa trong file
XSLT, sẽ được xử lý như định nghĩa trong file XSLT
XSLT
XSLT

Transformation
Engine
XSLT
Document
XML
Document
Result
Document
XSLT
<xsl:stylesheet version = '1.0„
xmlns:xsl='

<xsl:template match=“…">
<h1>
<xsl:value-of select="//title"/>
</h1>
<h2>
<xsl:value-of select="//author"/>
</h2>
</xsl:template>
<xsl:template match=“…">

</xsl:template>
</xsl:stylesheet>
XSLT
• Các thẻ XSLT cơ bản:
• <xsl:stylesheet>
• <xsl:template name = “name” match = “xpath”>
• <xsl:value-of select = “xpath”>
• <xsl:attribute>

• <xsl:text>
• <xsl:for-each select = “xpath”>
• <xsl:if test = “condition”>

XSLT
<xsl:template>: dùng để định nghĩa các khuôn mẫu – tập
các luật

<xsl:template name=“name” match=“xpath">
<h1>
<xsl:value-of select="//title"/>
</h1>
<h2>
<xsl:value-of select="//author"/>
</h2>
</xsl:template>
<xsl:template match=“xpath">

</xsl:template>
Khi gặp những thẻ thỏa đk “…” thì
thực hiện những chỉ thị sau
Biểu thức XPATH
XSLT
<xsl:value-of> Rút trích nội dung nằm trong các thẻ XML (
inner text hay thuộc tính của node ) và kết xuất ra file kết quả
<hocsinh>
<hoten>Nguyen Van A</hoten>
<mssv>0412341</mssv>
</hocsinh>
<xsl:stylesheet….>

<xsl:template match=“/”>
<h1><xsl:value-of select=“//hoten”/></h1>
<h2><xsl:value-of select=“//mssv”/></h2>
</xsl:template>
</xsl:stylesheet>
<h1>
</h1>
<h2>
</h2>
Nguyen Van A
0412341
Nếu bỏ dấu “//” ??
Nội dung rút trích được xác định thông qua thuộc tính select
Nếu select trả về một tập các thẻ thì nội dung tất cả các thẻ này
đều được kết xuất ra file kết quả
XSLT
<xsl:for-each> Duyệt và xử lý thông tin từng thẻ trong tập thẻ kết
quả được chọn ra từ thuộc tính select
<root>
<hoten id=“1”>Nguyen Van A</hoten>
<hoten id=“2”>Nguyen Thi B</hoten>
</root>
<xsl:stylesheet….>
<xsl:template match=“/”>
<xsl:for-each select = “//hoten”>
<xsl:text>id=</xsl:text>
<xsl:value-of select=“@id”/>
<xsl:text>hoten=</xsl:text>
<xsl:value-of select=“.”/>
</xsl:for-each>

</xsl:template>
</xsl:stylesheet>
id=1hoten=Nguyen Van A
Id=2hoten=Nguyen Thi B

×