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

pdf 21 trang ngocly 2420
Bạn đang xem 20 trang mẫu của tài liệu "Tự học XML - Bài 2: Đi lại trong XML bằng XPATH (Phần I)", để 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_2_di_lai_trong_xml_bang_xpath_phan_i.pdf

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

  1. Bài 2 Đi laị trong XML bằng XPATH (phần I) Chúng ta đa ̃ thấy cấu trúc và cú pháp của XML tương đối đơn giañ . XML cho ta môṭ cách chuẩn để trao đổi tin tứ c giữa các computers. Bước tiếp theo là tim̀ hiểu cách nào môṭ chương triǹ h chế biến (process) môṭ tài liêụ XML Di ̃ nhiên để chế biến môṭ XML chương triǹ h ứ ng duṇ g phải có cách đi laị bên trong tài liêụ để lấy ra values của các Elements hay
  2. Attributes. Do đó người ta thiết kế ra ngôn ngữ XML Path language, mà ta goị tắt là XPath. XPath đóng môṭ vai trò quan troṇ g trong công tác trao đổi dữ liêụ giữa các computers hay giữa các chương triǹ h ứ ng duṇ g vi ̀ nó cho phép ta lưạ choṇ hay sàng loc̣ ra những tin tứ c nào miǹ h muốn để trao đổi hay hiển thi.̣ Nếu khi làm viêc̣ với cơ sở dữ liêụ ta dùng SQL statement Select from TableXYZ WHERE để trích ra môṭ số records từ môṭ table, thi ̀ khi làm viêc̣ với XML, môṭ table dữ liêụ nho nhỏ, XPath cho ta những expressions về criteria (điều kiêṇ ) giống giống như clause WHERE trong SQL.
  3. XPath là môṭ chuẩn để process XML, cũng giống như SQL là môṭ chuẩn để làm viêc̣ với cơ sở dữ liêụ . Tiên phuông trong viêc̣ triển khai các chương triǹ h áp duṇ g XPath là công tác của các công ty phâǹ mềm lớn như Microsoft, Oracle, Sun, IBM, v.v. Sở di ̃ ta câǹ có môṭ chuẩn XPath là vi ̀ nó đươc̣ áp duṇ g trong nhiều hoàn cảnh, nên câǹ phải có môṭ lý thuyết rõ ràng, chính xác. Lý thuyết về XPath hơi khô khan nhưng nó đươc̣ áp duṇ g trong moị kỹ thuâṭ của gia điǹ h XML. Cho nên baṇ haỹ kiên nhâñ nắm vững những điều căn bản về nó để khi nào găp̣ chỗ người ta dùng XPath thi ̀ miǹ h nhâṇ
  4. diêṇ và hiểu đươc̣ . So với võ thuâṭ, thi ̀ XPath trong XML giống như Tấn pháp và cách thở. Tâp̣ luyêṇ Tấn pháp thi ̀ mõi chân, tâp̣ thở thi ̀ nhàm chán, nhưng không có hai thứ đó thì ra chiêu không có công lưc̣ , chưa đánh đa ̃ thua rồi. Ta sẽ chỉ hoc̣ những thứ thường dùng trong XPath thôi, nếu baṇ muốn có đâỳ đủ chi tiết về XPath thi ̀ có thể tham khaõ Specification của nó ở XML như môṭ cây đố i với XPath XPath cho ta cú pháp để diễn tả
  5. cách đi laị trong XML. Ta coi môṭ tài liêụ XML như đươc̣ đaị diêṇ băǹ g môṭ tree (cây) có nhiều nodes. Mỗi Element hay Attribute là môṭ node. Để minh hoạ ý niêṃ nâỳ , baṇ haỹ quan sát tài liêụ đăṭ hàng (order) XML sau: 2002-03-26 John Costello Chair 6 Desk 1
  6. Ta có thể biểu diễn XML trên băǹ g môṭ Tree như dưới đây, trong đó node Element màu nâu, node Attribute màu xanh:
  7. Chỉ điṇ h Location Path Baṇ có thể dùng XPath expression để chỉ điṇ h Location Path (lối đi đến vi ̣trí) đến node nào hay trích ra (trả về) môṭ hay nhiều nodes thỏa đúng điều kiêṇ yêu câù . XPath expression có thể là tuyêṭ đố i, tứ c là lấy node gốc làm chuẩn hay tương đố i, tứ c là khởi đâù từ node vừa mới đươc̣ choṇ . Node ấy đươc̣ goị là context node (node vai chính trong tiǹ h huống). Có hai cách viết để diễn tả XPath Location, viết nguyên và viết tắt. Trong cả hai cách ta đều dùng dấu slash (/) để nói đến Document
  8. Element, tứ c là node gốc. Ta có thể đi laị trong các node của Tree giống giống như các node của Windows System Directory mà ta thấy trong Panel bên trái của Window Explorer. Ta cũng sẽ dùng những ký hiêụ như slash /, môṭ chấm . và hai chấm của Windows System File Folder cho cách viết tắt trong XPath Location để đi xuống các nodes con, cháu, chỉ điṇ h context node, hay đi ngươc̣ lên các nodes tổ tiên. Location Path tuyêṭ đố i Chúng ta haỹ tim̀ vài location paths trong cái Tree của tài liêụ XML về đăṭ hàng nói trên. Muốn choṇ cái
  9. node của Element Order (nó cũng là Root Element) băǹ g cú pháp nguyên, ta sẽ dùng XPath expression sau đây: /child::Order Dic̣ h ra cú pháp tắt, expression nâỳ trở nên: /Order Đi ra nhánh của Tree, ta sẽ tim̀ đươc̣ n o d e Customer băǹ g cách dùng XPath expression sau: /child::Order/child::Customer Sau đây là XPath expression viết tắt tương đương:
  10. /Order/Customer Nếu baṇ muốn lấy ra môṭ node Attribute, baṇ phải nói rõ điều nâỳ băǹ g cách dùng từ chià khóa (keyword) attribute trong cách viết nguyên hay dùng character @ trong cú pháp tắt. Do đó để lấy Attribute OrderNo của Element Order, ta sẽ dùng XPath expression sau: /child::Order/attribute::OrderNo Cú pháp tắt cho Attribute OrderNo là: /Order/@OrderNo Để trích ra các nodes con cháu, tứ c
  11. là các nodes nhánh xa hơn, ta dùng keyword descendant trong cú pháp nguyên hay môṭ double slash (//) trong cú pháp tắt. Thí du,̣ để lấy ra các nodes Product trong tài liêụ , baṇ có thể dùng expression location path sau: /child::Order/descendant::Product Cú pháp tắt tương đương là: /Order//Product Baṇ cũng có thể dùng wildcards (lá bài Joker) để nói đến những nodes mà tên của chúng không thành vấn đề. Thí du,̣ dấu asterisk (*) wildcard chỉ điṇ h bất cứ node tên nào. Location
  12. path sau đây choṇ tất cả các nodes con của Element Order: /child::Order/child::* Cú pháp tắt tương đương là: /Order/* Location Path tương đố i Nhiều khi XPath location paths là tương đối với context node, trong trường hơp̣ ấy location path diễn tả cách lấy ra môṭ node hay môṭ số (set of) nodes tương đối với context node. Thí du ̣ như, nếu Element Item thứ nhất trong order là context node, thì
  13. location path tương đối để trích ra Element con Quantity là: child::Quantity Trong cú pháp tắt, location path tương đối là: Quantity Tương tư ̣ như vâỵ , để lấy ra Attribute ProductID của Element con Product, cái location path tương đối là: child::Product/attribute::ProductID Expression ấy dic̣ h ra cú pháp tắt là: Product/@ProductID
  14. Để đi ngươc̣ lên phía trên của Tree, ta dùng keyword parent (cha). Daṇ g tắt tương đương của keyword nâỳ là hai dấu chấm ( ). Thí du ̣ nếu context node là Element OrderDate, thì Attribute OrderNo có thể đươc̣ lấy ra từ Element Order băǹ g cách dùng location path tương đối sau: parent::Order/attribute::OrderNo Để ý là cú pháp nâỳ chỉ trả về môṭ tri ̣ số khi node cha tên Order. Nếu muốn lấy ra Attribute OrderNo từ node cha không câǹ biết nó tên gi ̀ baṇ phải dùng expression sau: parent::*/attribute::OrderNo
  15. Viết theo kiểu tắt đơn giản hơn vi ̀ baṇ không câǹ phải cung cấp tên của node cha. Baṇ có thể nói đến node cha băǹ g cách dùng hai dấu chấm ( ) như sau: /@OrderNo Ngoài ra, baṇ có thể nói đến chính context node băǹ g cách dùng hoăc̣ keyword self hoăc̣ môṭ dấu chấm (.). Điều nâỳ rất tiêṇ trong vài trường hơp̣ , nhất là khi baṇ muốn biết current context node là node nào. Dùng điều kiêṇ trong Location Path
  16. Baṇ có thể giới haṇ số nodes lấy về băǹ g cách gắn thêm điều kiêṇ sàng loc̣ vào location path. Cái điều kiêṇ giới haṇ môṭ hay nhiều nodes đươc̣ tháp vào expression bên trong môṭ căp̣ ngoăc̣ vuông ([]). Thí du,̣ để lấy ra moị Element Product có Attribute UnitPrice lớn hơn 70, baṇ có thể dùng XPath expression sau đây: /child::Order/child::Item/child::Product[attribute::UnitPrice>70] Trong cú pháp tắt, nó là: /Order/Item/Product[@UnitPrice>70] Trong expression của điều kiêṇ baṇ cũng có thể dùng Xpath tương đối , do đó trong expression điều kiêṇ baṇ
  17. có thể dùng bất cứ node nào trong thứ bâc̣ . Thí du ̣ sau đây lấy về những nodes Item có Element con Product với Attibute ProductID tri ̣số băǹ g 1: /child::Order/child::Item[child::Product/attribute::ProductID=1] Dic̣ h ra cú pháp tắt, ta có: /Order/Item[Product/@ProductID=1] (còn tiế p) Hoc̣ XML Vovisoft © 2000. All rights reserved. Last Updated: 23 Webmaster
  18. Dec 2003