1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng tích hợp dữ liệu và XML chương 06 XPath

13 424 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 438,73 KB

Nội dung

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

Ngày đăng: 23/01/2016, 00:41

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN