intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Tích hợp dữ liệu và XML - Chương 5: XPath

Chia sẻ: Cố Dạ Bạch | Ngày: | Loại File: PDF | Số trang:13

9
lượt xem
1
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Tích hợp dữ liệu và XML - Chương 5: XPath. Chương này cung cấp cho sinh viên những nội dung gồm: giới thiệu; khái niệm XPath; nút; cú pháp; đường dẫn tuyệt đối; đường dẫn tương đối; một số ví dụ;... Mời các bạn cùng tham khảo chi tiết nội dung bài giảng!

Chủ đề:
Lưu

Nội dung Text: Bài giảng Tích hợp dữ liệu và XML - Chương 5: XPath

  1. 06/03/2013 Nội dung 1. Giới thiệu XPath 2. Khái niệm XPath 3. Nút 4. Cú pháp Nguyễn Hồng Phương 5. Một số ví dụ Email: phuong.nguyenhong@hust.edu.vn Site: http://is.hut.edu.vn/~phuongnh Bộ môn Hệ thống thông tin Viện Công nghệ thông tin và Truyền thông Đại học Bách Khoa Hà Nội 1 2 1. Giới thiệu 2. Khái niệm XPath Xpath ñược sử dụng ñể duyệt qua các Là cú pháp ñể ñịnh nghĩa các phần của phần tử và thuộc tính trong một tài liệu tài liệu XML XML Sử dụng biểu thức ñường dẫn ñể duyệt Cùng với XQuery và XPointer, Xpath là tài liệu XML phần tử chính trong chuẩn XSLT của Chứa một thư viện các hàm chuẩn W3C. Là thành phần chính trong XSLT Là khuyến cáo của W3C từ 11/1999 3 4 2. Khái niệm Xpath (tiếp) 3. Nút Biểu thức ñường dẫn Có 7 loại nút Sử dụng biểu thức ñường dẫn ñể chọn lựa phần tử các nút/tập nút trong tài liệu XML thuộc tính Khá giống với hệ thống file máy tính truyền text thống namespace Hàm chuẩn chỉ thị xử lý Trên 100 hàm chuẩn ñược tích hợp sẵn: comment các hàm giá trị chuỗi, giá trị số, so sánh nút tài liệu date time, Boolean,… Coi tài liệu XML có cấu trúc cây 5 6 1
  2. 06/03/2013 Giá trị nguyên tố: nút không có nút cha và nút con Harry Potter Ví dụ: J K. Rowling, "en" J K. Rowling 2005 Item: là giá trị nguyên tố hoặc nút 29.99 Quan hệ giữa các nút: Cha: mỗi phần tử và thuộc tính ñều có nút Nút gốc: cha (trừ nút gốc) Nút phần tử: J K. Rowling Con: mỗi nút có thể có 0, 1 hoặc nhiều nút Nút thuộc tính: lang="en" con 7 8 Ví dụ: Nút anh em: có cùng nút cha Tổ tiên: nút cha, nút cha của cha,… 2002-03-26 Hậu duệ: Nút con, nút con của con,… John Costello Chair 6 Desk 1 9 10 Dạng cây 4. Cú pháp 4.1. Đường dẫn tuyệt ñối 4.2 Đường dẫn tương ñối 4.3. Kí tự ñại diện 4.4. Vị từ 4.5. Một số hàm 4.6. Một số toán tử 11 12 2
  3. 06/03/2013 4.1. Đường dẫn tuyệt ñối Nếu ñường dẫn XPath bắt ñầu bởi dấu / thì Muốn ñi ñến thuộc tính của nút, cần có nghĩa ñây là một ñường dẫn tuyệt ñối phải chỉ rõ từ khóa Attribute trong cú bắt ñầu từ phần tử gốc. pháp ñầy ñủ hoặc @ trong cú pháp tắt. Ví dụ: muốn chọn nút Order ta viết như sau Để lấy thuộc tính OrderNo của nút Cú pháp ñầy ñủ: /child::Order Order ta dùng cú pháp Xpath: Cú pháp tắt: /Order Cú pháp ñầy ñủ: Đi ra nhánh con Custumer bằng XPath như /child::Order/Attribute::OrderNo sau: Cú pháp tắt: /Order/@OrderNo Cú pháp ñầy ñủ: /child::Order/child::Custumer Cú pháp tắt: /Order/Custumer 13 14 4.2. Đường dẫn tương ñối 4.3. Ký tự ñại diện Khi muốn trích một phần tử nào ñó mà Bất kỳ nút nào: ký tự ñại diện * chỉ biết tên của phần tử này, không biết ñể lấy tất cả các phần tử con của phần tử là phần tử này nằm ở vị trí nào thì có Order, ta viết như sau: Cú pháp ñầy ñủ: /child::Order/child::* thể dùng ñường dẫn tương ñối. Cú pháp tắt: /Order/* Dùng dấu // ñể chỉ cho trình phân tích Bất kỳ nút thuộc tính nào: @* biết ñây là ñường dẫn tương ñối. Bất kỳ nút của bất kỳ kiểu nào: node() Ví dụ: ñể trích các phần tử có tên là Ví dụ Product /bookstore/* Chọn tất cả nút con của phần tử bookstore Cú pháp ñầy ñủ: //child::Product //* Chọn tất cả phần tử trong tài liệu Cú pháp tắt: //Product //title[@*] Chọn tất cả phần tử title có bất kỳ thuộc tính 15 16 4.4. Vị từ Vị từ: ví dụ Được sử dụng ñể tìm một nút xác ñịnh lấy tất cả phần tử title có thuộc tính tên là hoặc một nút chứa một giá trị xác ñịnh lang: //title[@lang] lấy tất cả phần tử title có thuộc tính lang Được ñặt trong cặp ngoặc vuông [] nhận giá trị 'eng': //title[@lang='eng'] Ví dụ: lấy ra phần tử book là con của bookstore chọn phần tử book ñầu tiên là con của có phần tử price với giá trị lớn hơn 35: phần tử bookstore: /bookstore/book[1] /bookstore/book[price>35.00] chọn phần tử book cuối cùng là con của /bookstore/book[price>35.00]/title phần tử bookstore: /bookstore/book[last()] chọn 2 phần tử book ñầu tiên là con của phần tử bookstore: /bookstore/book[position()
  4. 06/03/2013 Vị từ: ví dụ 4.5. Một số hàm lấy mọi phần tử Product có thuộc tính Tên hàm Mô tả Ví dụ UnitPrice > 70 count() Hàm lấy tổng số //Item[count(*)=2] Cú pháp ñầy ñủ: nút con của một Chọn tất cả các phần tử Item có số phần tử nào ñó phần tử con là 2 //child::Product[Attribute::UnitPrice>70] name() Lấy tên của phần /Order/*[name()='Item'] Cú pháp tắt: //Product[@UnitPrice>70] tử Chọn tất cả các phần tử con của Order có tên là Item lấy những phần tử Item có phần tử con là not() Hàm phủ ñịnh //Item/*[not(@*)] Product và có thuộc tính ProductID=1: Chọn tất cả các phần tử con của Item Cú pháp ñầy ñủ: không chứa thuộc tính nào //child::Item[child::Product/Attribute::P normalize- Hàm bỏ khoảng //Item/*[normalizespace(@ space(str) trắng ProductID)=’abc’] roductID=1] Chọn tất cả các phần tử con của Item Cú pháp tắt: có thuộc tính ProductID=abc (không //Item[Product/@ProductID=1] phân biệt khoảng trắng) 19 20 4.5. Một số hàm (tiếp) 4.5. Một số hàm (tiếp) Tên hàm Mô tả Ví dụ Tên hàm Mô tả Ví dụ startswith( Hàm kiểm tra xem //item/*[starts- str,substr) chuỗi str có chứa chuỗi with(name(),'P')] position() Cho biết vị trí hiện tại //Item[position()=5] substr (tính từ vị trí Chọn tất cả các phần tử con của của phần tử Chọn phần tử Item có vị trí là 5 ñầu tiên) hay không Item có tên bắt ñầu bởi ký tự P contains(st Kiểm tra một chuỗi str //item/*[contains(name(),' floor() Lấy giá trị nhỏ nhất gần r,substr) có chứa chuổi con u')] với giá trị chỉ ñịnh substr hay không Chọn tất cả các phần tử con của ceiling() Lấy giá trị lớn nhất gần phần tử Item mà tên của các với giá trị chỉ ñịnh phần tử con này có chứ ký tự u last() Vị trí nút cuối cùng //Item[last()] string- Hàm lấy chiều dài của //Item/*[string- Chọn phần tử Item cuối cùng length(str) 1 chuỗi length(name())=5] Chọn tất cả các phần tử con của Item mà ñộ dài tên của các phần tử con này là 5 21 22 4.6. Một số axe 4.6. Một số axe (tiếp) Tên Mô tả Ví dụ Tên Mô tả Ví dụ following- Chọn phần tử /Order/OrderDate/following- | Toán tử hoặc //Item/*[starts- sibling cùng cấp kế tiếp sibling::* dùng ñể chọn ra with(name(),’U’) | startswith( chọn các phần tử Custumer và hai một lần nhiều name(),’Q’) ] phần tử Item theo sau và cùng cấp phần tử có ñiều Chọn tất cả các phần tử là con của với phần tử OrderDate kiện khác nhau Item có có tên bắt ñầu bởi ký tự P preceding- Chọn phần tử /Order/Custumer/preceding- hoặc Q sibling cùng cấp trước sibling::* descendant Chọn phần tử /Order/Item/Product/descendan ñó chọn phần tử OrderDate con của phần tử t::* chỉ ñịnh Chọn tất cả các phần tử là con của following Chọn phần tử /Order/OrderDate/following::* /Order/Item/Product theo sau phần tử chọn phần tử Custumer và 2 phần tử chỉ ñịnh Item và các phần tử con của Item ancestor Chọn phần tử /Order/Item/Product/ancestor:: cấp trên * chọn 2 phần tử Item và phần tử Order 23 24 4
  5. 06/03/2013 4.6. Một số axe (tiếp) 4.7. Một số toán tử Tên toán tử Mô tả Ví dụ Toán tử Mô tả Ví dụ Trả về preceding Chọn các phần tử /Order/Custumer/preceding:: | Tính toán hai tập //book | //cd Trả về tập nút với phần tử ñứng trước phần * tử chỉ ñịnh chọn tất cả các phần tử ñi trước nút là book và cd phần tử Custumer + Cộng 6+4 10 descendant- Chọn phần tử cấp /Order/Item/descendant-or- or-self dưới và phần tử self::* - Trừ 6-4 2 chỉ ñịnh Chọn tất cả các phần tử Item và các phần tử con của phần tử này * Nhân 6*4 24 ancestor-or- Chọn phần tử cấp /Order/Item/product/ancesto self trên và phần tử r-orself::* div Chia 8 div 4 2 chỉ ñịnh chọn 2 phân tử product, 2 phần tử Item và phần tử Order = Bằng price=9.80 ñúng nếu price là 9.80 sai nếutprice is 9.90 != 25 26 5. Một số ví dụ Toán tử Mô tả Ví dụ Trả về Chọn phần tử gốc AAA: /AAA < Nhỏ hơn price=9.00 false nếu price là 9.80 9.80 >= Lớn hơn price>=9.80 hoặc bằng or or price=9.80 or price=9.70 and and price>9.00 and price
  6. 06/03/2013 Chọn tất cả các phần tử BBB: //BBB Chọn tất cả các phần tử BBB là con của DDD: //DDD/BBB 31 32 Chọn tất cả các phần tử mà dòng họ của Chọn tất cả các phần tử BBB mà nó có 3 nó là /AAA/CCC/DDD: /AAA/CCC/DDD/* cấp cha: /*/*/*/BBB 33 34 Chọn phần tử BBB ñầu tiên là con của Chọn phần tử BBB cuối cùng là con của AAA: /AAA/BBB[1] AAA: /AAA/BBB[last()] 35 36 6
  7. 06/03/2013 Chọn tất cả các thuộc tính có tên id: Chọn tất cả các phần tử BBB có thuộc tính //@id tên là id: //BBB[@id] 37 38 Chọn tất cả các phần tử BBB có tên thuộc Chọn tất cả các phần tử BBB có tên thuộc tính: //BBB[@*] tính là bbb, không phân biệt khoảng trắng: //BBB[normalize-space(@name)='bbb'] 39 40 Chọn tất cả các phần tử có chứa các phần tử mà Chọn tất cả các phần tử mà tên của nó bắt ñầu là trong ñó có 2 phần tử con tên là BBB: ký tự B: //*[starts-with(name(),’B’)] //*[count(BBB)=2] 41 42 7
  8. 06/03/2013 Chọn tất cả các phần tử mà tên của nó có chứa Chọn tất cả các phần tử mà tên của nó có ñộ dài ký tự B: //*[contains(name(),’B’)] là 3: //*[string-length(name())=3)] 43 44 Chọn tất cả các phần tử mà tên của nó có ñộ dài Chọn tất cả các phần tử mà tên của nó là CCC khác 3: //*[string-length(name())!=3)] hoặc BBB: //*[name()=’CCC’]| //*[name()=’BBB’] 45 46 Chọn tất cả các phần tử là con của Chọn tất cả các phần tử là cha của phần AAA/BBB: /AAA/BBB/descendant::* tử DDD: //DDD/parent::* 47 48 8
  9. 06/03/2013 Chọn tất cả các phần tử là tổ tiên của Chọn tất cả các phần tử cùng cấp ñi sau phần tử DDD: //DDD/ancestor::* phần tử BBB: //BBB/followingsibling::* 49 50 Chọn tất cả các phần tử cùng cấp ñi trước Chọn tất cả các phần tử ñi sau phần tử phần tử XXX: //XXX/precedingsibling::* ZZZ: //ZZZ/following::* 51 52 Chọn tất cả các phần tử ñi trước phần tử XXX Chọn tất cả các phần tử CCC và con của nó: ngoại trừ những phần tử gốc: //XXX/preceding::* //CCC/descendant-or-self::* 53 54 9
  10. 06/03/2013 Chọn tất cả các phần tử GGG và tổ tiên của nó: Chọn phần tử BBB ñầu tiên: //BBB[floor(1.2)] //GGG/ancestor-or-self::* 55 56 6. Ví dụ tổng hợp Chọn phần tử BBB thứ hai: //BBB[ceiling(1.2)] Quan sát lại file book.xml: Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J K. Rowling 2005 29.99 57 58 File book.xml (tiếp) XQuery Kick Start Nạp tài liệu XML James McGovern Per Bothner IE5, IE6: Kurt Cagle var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP") James Linn Vaidyanathan Nagarajan Trình duyệt khác: 2003 49.99 var xmlhttp=new XMLHttpRequest() Learning XML Erik T. Ray 2003 39.95 59 60 10
  11. 06/03/2013 Chọn tất cả các title Chọn nút /bookstore/book/title IE sử dụng phương thức selectNodes() xmlDoc.selectNodes(xpath); Trình duyệt khác sử dụng phương thức function loadXMLDoc(dname){ if (window.XMLHttpRequest){ evaluate() xhttp=new XMLHttpRequest(); }else{ xmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE,null); xhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xhttp.open("GET",dname,false); xhttp.send(""); return xhttp.responseXML; } xml=loadXMLDoc("books.xml"); path="/bookstore/book/title" 61 62 Chọn tất cả các title (tiếp) Chọn tất cả các title (tiếp) while (result) // code for IE { if (window.ActiveXObject) document.write(result.childNodes[0].nodeValue); { document.write(""); var nodes=xml.selectNodes(path); result=nodes.iterateNext(); } for (i=0;i
  12. 06/03/2013 Chọn title của book ñầu tiên (tiếp) Chọn title của book ñầu tiên (tiếp) { Chú ý: IE5 trở về sau cho rằng, phần tử var nodes=xml.evaluate(path, xml, null, XPathResult.ANY_TYPE,null); var result=nodes.iterateNext(); ñầu tiên bắt ñầu từ 0 while(result) Giải quyết vấn ñề này: { xml.setProperty("SelectionLanguage","XPath"); document.write(result.childNodes[0].nodeValue); xml.selectNodes("/bookstore/book[1]/title"); document.write(""); result=nodes.iterateNext(); // code for IE } if (window.ActiveXObject){ } xml.setProperty("SelectionLanguage","XPath"); var nodes=xml.selectNodes(path); for (i=0;i
  13. 06/03/2013 Lời hay ý ñẹp "Một vết chém của con dao có thể chữa khỏi, nhưng một vết chém của lưỡi thì khó lòng chữa ñược" Ngạn ngữ Tây Ban Nha 73 13
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2