xpath & xslt

31
XPATH & XSLT Công nghệ XML và Ứng dụng:

Upload: peers

Post on 04-Feb-2016

84 views

Category:

Documents


3 download

DESCRIPTION

XPATH & XSLT. Công nghệ XML và Ứng dụng:. 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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: XPATH  &  XSLT

XPATH & XSLTCông nghệ XML và Ứng dụng:

Page 2: XPATH  &  XSLT

Nội dung

XPATH- Các biểu thức XPATH thông dụng- Axes

XSLT

Lập trình (C#)

Page 3: XPATH  &  XSLT

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

Page 4: XPATH  &  XSLT

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 B là con của A

- /AAA/DDD/CCC: C – con D – con A (gốc)

//: Nút ở độ sâu bất kì //CCC: nút CCC ở độ sâu bất kì

Page 5: XPATH  &  XSLT

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 B ở cấp thứ 2

//*: TẤT CẢ CÁC NODE

Page 6: XPATH  &  XSLT

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 )

Page 7: XPATH  &  XSLT

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

Page 8: XPATH  &  XSLT

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)

Page 9: XPATH  &  XSLT

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

Page 10: XPATH  &  XSLT

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 ?

Page 11: XPATH  &  XSLT

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

Page 12: XPATH  &  XSLT

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

Page 13: XPATH  &  XSLT

XPATH

XPATH: Axisparent:: : 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 ECC

Page 14: XPATH  &  XSLT

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

Page 15: XPATH  &  XSLT

XPATH

XPATH: Axisfollowing-sibling:: : Tất cả các thẻ “em”preceding-sibling:: : Tất cả các thẻ “anh”

<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::*

Page 16: XPATH  &  XSLT

XPATH

XPATH: Axisfollowing:: : Tất cả các thẻ có thẻ mở xuất hiện sau thẻ đóng của thẻ hiện hànhpreceding::: Tất cả các thẻ có thẻ đóng xuất hiện trước thẻ mở của thh //BBB/following::*

<AAA>

<BBB>

<DDD/>

</BBB>

<CCC>

<EEE/>

</CCC>

</AAA>

//EEE/preceding::*

<AAA>

<BBB>

<DDD/>

</BBB>

<CCC>

<EEE/>

</CCC>

</AAA>

Page 17: XPATH  &  XSLT

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

Page 18: XPATH  &  XSLT

Nội dung

XPATH- Các biểu thức XPATH thông dụng- Axes

XSLT

Lập trình (C#)

Page 19: XPATH  &  XSLT

XSLT

XSLT:Chuyển đổi cấu trúc của tài liệu xml (thành 1 tài liệu xml khác, html…)

Khác ngôn ngữ lập trình

- XSLT chỉ định nghĩa các qui tắc chuyển đổi, việc thực hiện chuyển đổi phải nhờ một chương trình khác

Chương trình (C#, VB.NET…)XML XSLTXMLHTML

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

Là một tập cáck khuôn mẫu (template) và xử lý tương ứng

Page 20: XPATH  &  XSLT

XSLT

<xsl:template>: dùng để định nghĩa các template<xsl:stylesheet version = '1.0‘ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>

<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>

Khi gặp những thẻ thỏa đk “…” thì thực hiện những chỉ thị sau

Biểu thức XPATH

Page 21: XPATH  &  XSLT

XSLT

<xsl:value-of> Rút trích nội dung nằm trong các thẻ XML 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 “//” ??

Các thẻ được rút trích nội dung đượ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ả

Page 22: XPATH  &  XSLT

XSLT

<xsl:template>

<source> <a1>a1</a1> <a2>a2</a2></source>

<xsl:stylesheet…………>

</xsl:stylesheet>

-Không có template Áp dụng xử lý mặc định: tiếp tục so khớp cho tất cả thẻ con của thẻ hiện hành

-Không có template

Mặc định: trả ra nội dung của thẻa1a2

<xsl:template match=“/”>

</xsl:template><xsl:apply-templates/>

Page 23: XPATH  &  XSLT

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 AId=2hoten=Nguyen Thi B

Page 24: XPATH  &  XSLT

XSLT

<xsl:sort>: Thực hiện sắp xếp trên file output

<root> <hoten>Tran Van A</hoten> <hoten>Nguyen Thi B</hoten></root>

<xsl:stylesheet….> <xsl:template match=“/”> <xsl:for-each select = “//hoten”> <xsl:sort order=“ascending” select=“.”/> <xsl:value-of select=“.”/> </xsl:for-each> </xsl:template></xsl:stylesheet>

Nguyen Thi BTran Van A

<root> <value>1</value> <value>9</value> <value>20</value></root>

?????

Page 25: XPATH  &  XSLT

XSLT

<xsl:sort data-type>

<root> <value>1</value> <value>20</value> <value>9</value></root>

<xsl:stylesheet….> <xsl:template match=“/”> <xsl:for-each select = “//value”> <xsl:sort data-type=“number” select=“.”/> <xsl:value-of select=“.”/> </xsl:for-each> </xsl:template></xsl:stylesheet>

Kết quả:1920

Nếu không xác lập thì data-type = “text”

Page 26: XPATH  &  XSLT

XSLT

<xsl:if test>

<root> <value>1</value> <value>20</value> <value>9</value></root>

<xsl:stylesheet….> <xsl:template match=“/”> <xsl:for-each select = “//value”> <xsl:sort data-type=“number” select=“.”/> <xsl:value-of select=“.”/> <xsl:if test=“not (position()=last())”> <xsl:text>,</xsl:text> </xsl:if> </xsl:for-each> </xsl:template></xsl:stylesheet>

Kết quả:1,9,20

Page 27: XPATH  &  XSLT

XSLT

<xsl:choose> <root> <value>A</value> <value>B</value></root>

<xsl:stylesheet….> <xsl:template match=“/”> <xsl:for-each select = “//hoten”> <xsl:choose> <xsl:when test = “A”/> <xsl:text>30</xsl:text> </xsl:when> …… </xsl:choose> </xsl:for-each> </xsl:template></xsl:stylesheet>

Kết quả:30

Page 28: XPATH  &  XSLT

XSLT

<xsl:element>, <xsl:attribute><root> <sinhvien id=“1”>Nguyen Van A</sinhvien > <sinhvien id=“2”>Tran Thi B</sinhvien ></root>

<xsl:stylesheet….> <xsl:template match=“/root”> <xsl:element name=“StudentList”> <xsl:for-each select = “sinhvien”>

<xsl:element name=“Student”> <xsl:attribute name=“StudentId” > <xsl:value-of select=“@id” /> </xsl:attribute></xsl:element>

</xsl:for-each> </xsl:element > </xsl:template></xsl:stylesheet>

Kết quả:<StudentList> <Student StudentId=“1” /> <Student StudentId=“2” /></StudentList>

Page 29: XPATH  &  XSLT

XSLT

XSLT:Các hàm tính toán và format số

Tạo các node (thẻ) và tạo thuộc tính

Khai báo và sử dụng biến

Các hàm boolean

Các hàm xử lý chuỗi

Các hàm copy node

http://www.zvon.org/

Page 30: XPATH  &  XSLT

Nội dung

XPATH- Các biểu thức XPATH thông dụng- Axes

XSLT

Lập trình (C#)

Page 31: XPATH  &  XSLT

Lập trình

XmlDocument xdoc = new XmlDocument();xdoc.Load (xml_file );XslTransform xsl = new XslTransform();XmlTextWriter wt = new XmlTextWriter( out_htm_file , System.Text. UTF8Encoding.UTF8 );try{

xsl.Load( xslt_file );xsl.Transform(xdoc,null,wt);

}catch (Exception ex){

MessageBox.Show(ex.Message);}finally{

wt.Close();}

Trong ASP.NET, dùng xml control