Tự học XML - Bài 3: Đi lại trong XML bằng XPATH (Phần II)

pdf 34 trang ngocly 1640
Bạn đang xem 20 trang mẫu của tài liệu "Tự học XML - Bài 3: Đi lại trong XML bằng XPATH (Phần II)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdftu_hoc_xml_bai_3_di_lai_trong_xml_bang_xpath_phan_ii.pdf

Nội dung text: Tự học XML - Bài 3: Đi lại trong XML bằng XPATH (Phần II)

  1. Bài 3 Đi laị trong XML bằng XPATH (phần II) Collections Cái bô ̣ (Set of) Nodes do XPath trả về đươc̣ goị là Collection. Thông thường trong lâp̣ triǹ h, từ "Collection" đươc̣ dùng để nói đến môṭ tâp̣ hơp̣ các objects đồng loaị. Ta có thể lâǹ lươṭ đi qua (iterate through) các objects trong môṭ Collection nhưng không đươc̣ bảo đảm thứ tư ̣ của chúng, tứ c là găp̣ object nào trước hay object nào sau.
  2. Trái laị, trong chuẩn XPath, khi môṭ Collection đươc̣ trả về bởi môṭ XPath Query (hỏi), nó giữ nguyên thứ tư ̣ các Nodes và cấp bâc̣ của chúng trong tài liêụ XML. Tứ c là nếu XPath trả về môṭ cành các nodes thi ̀ trừ những nodes không thỏa điều kiêṇ , các node còn laị vâñ giữ đúng vi ̣trí trên cành. Vi ̀ các Attributes của môṭ Element không có thứ tư,̣ nên chúng có thể năm̀ lôṇ xôṇ trong môṭ Collection. Indexing trong môṭ Collection Môṭ Collection của Nodes đươc̣ xem như môṭ Array. Muốn nói trưc̣ tiếp đến
  3. môṭ Node trong Collection ta có thể dùng môṭ index trong căp̣ ngoăc̣ vuông. Node thứ nhất có Index là 1. Căp̣ ngoăc̣ vuông ([]) có precedence cao hơn (đươc̣ tính trước) dấu slash(/) hay hai dấu slash (//). Dưới đây là hai thí du:̣ Expression Ý nghiã Element author[1] author đâù tiên. Element author[firstname] author thứ ba có [3] môṭ Element firstname con. Mố i liên hê ̣(Axes)
  4. Môṭ location path dùng môṭ Axis để chỉ điṇ h mối liên hê ̣ giữa các Nodes đươc̣ choṇ đối với context node. Sau đây là bảng liêṭ kê đâỳ đủ các axes: Axes Ý nghiã Tổ tiên của context node. Những tổ tiên của context node gồm có cha, ancestor:: ông nôị , ông cố .v.v., do đó ancestor:: axis luôn luôn kể cả root node trừ khi chính context node là root node. Chính context node và tổ tiên của nó. ancestor-or- Cai ancestor-or-self:: self:: ́
  5. axis luôn luôn kể cả root node. Các Attributes của context node. Nếu context node attribute:: không phải là môṭ Element thi ̀ chắc chắn axis sẽ trống rỗng. Con cái của context node. Môṭ con là bất cứ node nào năm̀ ngay dưới child:: context node trong tree. Tuy nhiên, Attribute hay Namespace nodes không đươc̣ xem là con cái của context node. Con cháu của context
  6. node. Con cháu là con, descendant:: cháu, chít, .v.v., do đó descendant:: axis không bao giờ chứ a Attribute hay Namespace nodes. Moị nodes hiêṇ ra sau context node trên tree, following:: không kể con cháu, Attribute nodes, hay Namespace nodes. Moị nodes em (năm̀ sau) context node. following-sibling:: axis nói đến chỉ những Nodes con, của cùng môṭ Node cha, năm̀ trên tree sau following- sibling:: context node. Axis không kể các Nodes anh năm̀
  7. trước context node. Nếu context node là Attribute hay Namespace thi ̀ following-sibling:: axis sẽ trống rỗng. Những Namespace nodes của context node. Mỗi namespace có môṭ namespace node trong scope (phaṃ vi hoaṭ namespace:: đôṇ g) của context node. Nếu context node không phải là môṭ Element thi ̀ Axis sẽ trống rỗng. Node cha của context node, nếu nó có cha. parent:: Node cha là node năm̀
  8. ngay phía trên context node trên tree. Moị nodes hiêṇ ra trước context node trên tree, không kể các nodes tổ tiên, Attribute nodes, hay Namespace nodes. preceding:: Môṭ cách để nhâṇ diêṇ preceding:: axis là moị nodes đa ̃ kết thúc hoàn toàn trước khi context node bắt đâù . Moị nodes anh (năm̀ trước) context node. preceding-sibling:: axis nói đến chỉ những Nodes con, của cùng môṭ Node preceding- ̀ sibling:: cha, năm trên tree trước context node.
  9. Nếu context node là Attribute hay Namespace thi ̀ preceding-sibling:: axis sẽ trống rỗng. self:: Là chính context node. Sàng loc̣ (Filters) Như ta đa ̃ thấy ở trên, để giới haṇ chỉ lấy ra những Nodes thỏa đáng môṭ điều kiêṇ , ta gắn môṭ Filter (sàng loc̣ ) vào Collection. Filter ấy là môṭ Clause giống giố ng Clause WHERE trong ngôn ngữ SQL của cơ sở dữ liêụ . Nếu môṭ Collection năm̀ giữa môṭ filter, nó sẽ cho kết quả TRUE nếu Collection trả về ít nhất môṭ Node và FALSE nếu
  10. Collection trống rỗng (empty). Thí dụ expression author/degree có nghiã răǹ g h à m biế n đổ i Collection ra tri ̣ số Boolean sẽ có giá tri ̣TRUE nếu hiêṇ hữa môṭ Element author có Element con tên degree. Filters luôn luôn đươc̣ tính theo context của nó. Nói môṭ cách khác, cái expression book[author] có nghiã là cho mỗi Element book tim̀ thấy, nó sẽ đươc̣ thử xem có chứ a môṭ Element con tên author không. Tương tư ̣ như vâỵ , book[author = 'Brown'] có nghiã răǹ g cho mỗi Element book tim̀ thấy, nó sẽ đươc̣ thử xem có chứ a môṭ Element con tên author với tri ̣ số băǹ g Brown không.
  11. Ta có thể dùng dấu chấm (.) để khám current context node. Thí du ̣ như, book[. = 'Dreams'] có nghiã răǹ g cho mỗi Element book tim̀ thấy trong current context, nó sẽ đươc̣ thử xem có tri ̣ số băǹ g Dreams không. Dưới đây là môṭ ít thí du:̣ Expression nghiã Moị Element book có book[excerpt] chứ a ít nhất môṭ Element excerpt Moị Element
  12. title năm̀ trong những book[excerpt]/title Element book có chứ a ít nhất môṭ Element excerpt Moị Element author có chứ a ít nhất môṭ Element degree book[excerpt]/author[degree] và năm̀
  13. trong những Elements book có chứ a ít nhất môṭ Element excerpt Moị Element book có chứ a ít nhất môṭ Element book[author/degree] author với ít nhất môṭ Element degree
  14. con. Moị Element book có chứ a ít nhất môṭ book[excerpt][title] Element excerpt và ít nhất môṭ Element title. So sá nh Để so sánh hai objects trong XPath ta dùng dấu (=) cho bằng nhau và (!= ) cho không bằng nhau. Moị Element và
  15. Attributes là string, nhưng đươc̣ Typecast (xem như ) những con số khi đem ra so sánh. Expression Ý nghiã Moị Element author có author[lastname = chứ a ít nhất "Smith"] môṭ Element lastname với tri ̣số băǹ g Smith. Moị Element author có author[lastname[1] = Element "Smith"] lastname
  16. con đâù tiên với tri ̣số băǹ g Smith. Moị Element degree, là con môṭ Element author/degree[@from author, và != "Harvard"] có môṭ Attribute from với tri ̣ số không phải là "Harvard". Moị Element author có
  17. chứ a môṭ Element author[lastname = lastname /editor/lastname] băǹ g với Element lastname là con của root Element editor. Moị Element author[. = "John author có tri ̣ Hamilton"] số string là John Hamilton. Operator Union | (hop̣ laị)
  18. Ngôn ngữ Xpath hỗ trơ ̣ Operator Union, giống như Logical OR (hoăc̣ là). Dưới đây là vài thí du:̣ Expression Ý nghiã Moị Element firstname | firstname và lastname lastname trong current context. Moị Element book hay (bookstore/book | magazine là con bookstore/magazine) môṭ Element bookstore. Moị Element book | book hay Element book/author author là con những Elements
  19. book. Moị Element price la con cua (book | ̀ ̉ Element book hay magazine)/price Element magazine. Thử loaị Node (Node Type Tests) Để choṇ những loaị Node khác hơn là Element node, ta dùng Node-Type Test . Muc̣ đích của viêc̣ dùng Node-Type test là để chỉ điṇ h sư ̣ lưạ choṇ khác thường. Thí du ̣ như, descendant::text() cho ta moị text nodes là con cháu của context node, dù răǹ g loaị node chính của con cháu
  20. context node là Element. Có 4 loaị Node- Type tests như liêṭ kê dưới đây. Node type Trả về Thí dụ moị following::comment() comment() comment choṇ moị comment nodes node. hiêṇ ra sau context node. moị preceding::node() node() node. choṇ moị nodes hiêṇ ra trước context node. moị self::processing processing- processing instruction() choṇ moị instruction() instruction processing instruction node. nodes trong context node. moị child::text() text() text node. text nodes là con của the context node.
  21. Thử Node nhắ m vào loaị Processing Instruction Môṭ node test có thể choṇ processing instruction thuôc̣ loaị nào, tứ c là choṇ muc̣ tiêu (target). Cú pháp của môṭ loaị test như thế là: processing-instruction("target") Thí du ̣ node test sau đây trả về moị processing instruction nodes có nhắc đến môṭ XSL stylesheet trong tài liêụ : /child::processing-instruction("xml-stylesheet") Thêm môṭ số thí du ̣ Location Path
  22. Expression Ý nghiã Moị Element author current ./author context. Expresion nâỳ tương đương với expression trong hàng kế. Moị Element author author current context. Document (Root)
  23. /bookstore Element tên bookstore của tài liêụ nâỳ . Moị Element //author author tài liêụ . Moị Element book có Attribute style với value băǹ g book[/bookstore/@specialty = value của @style] Attribute specialty Document
  24. Element bookstore của tài liêụ . Moị Element author/firstname firstname con của các Elements author Moị Element môṭ hay nhiều bâc̣ thấp hơn, tứ c là con cháu của, bookstore//title Element bookstore Lưu ý là
  25. expression nâỳ khác với expression trong hàng kế. Moị bookstore/*/title Element cháu của các bookstore Moị Element emph bất cứ nơi nào dưới excerpt bookstore//book/excerpt//emph con của những elements book , bất cứ nơi nào dưới
  26. element bookstore Moị Element ̀ .//title môṭ hay nhiêu bâc̣ thấp hơn current context node. Moị Element là author/* con của các elements con author Moị Element book/*/lastname lastname cháu của các elements con
  27. bookM.oị Element chau */* ́ của current context node. Moị Element con *[@specialty] có Attribute specialty Attribute @style style của current context node. Attribute exchange của những Elements price trong
  28. price/@exchange current context, tứ c là những Elements price của current context node. Trả về môṭ node set trống rỗng, vì Attributes không có Element con. Expression nâỳ đươc̣ price/@exchange/total chấp nhâṇ trong văn phaṃ của XML Path
  29. Language, nhưng không thâṭ sư ̣ hơp̣ lê.̣ Moị Element book có Attribute style trong current book[@style] context node. Lưu ý phâǹ năm̀ trong ngoăc̣ vuông là điều kiêṇ của Element book Attribute
  30. style của moị Element booktrong current context node. book/@style Ở đây không có điều kiêṇ như hàng trên. Ta nói đến Attribute hay Element năm̀ bên phải nhất. Moị Attributes @* của current context node. Element author
  31. author[1] nhất trong current context node. Element author author[firstname][3] có môṭ Element con firstname Element my:book book từ namespace my. Moị Element trong my:* namespace my.
  32. Hoc̣ XML Vovisoft © 2000. All rights reserved. Last Updated: 23 Dec 2003 Webmaster