Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 2

<Product ProductID="1"> Coca-Cola

</Product>

</Category>

</Catalog>

Luật cuối cùng về tài liệu XML well-formed đòi hỏi giá trị của thuộc tính phải được gói trong một cặp dấu nháy đơn hay cặp dấu nháy kép. Tài liệu dưới đây không well-form vì các giá trị của thuộc tính không được ngoặc đàng hoàng, số 1 không có dấu ngoặc, số 2 có một cái là nháy đơn và một cái là nháy kép:

<Catalog>

<Product ProductID=1>Chair</Product>

<Product ProductID='2">Desk</Product>

</Catalog>

Ngoài các dữ liệu cần thiết, một tài liệu XML cũng có chứa các Processing Instructions (chỉ thị về cách xử lý) cho parser và Comments (ghi chú) cho người đọc.

Processing Instruction nằm trong cặp Tags <? và ?>. Thông thường nó cho biết phiên bản của XML nhằm chỉ định parser cần làm theo. Có khi nó cũng cho biết dữ liệu trong XML dùng bảng mã mã hóa nào, thí dụ như uft-8. Còn một thuộc tính nữa là standalone. standalone cho parser biết là tài liệu XML có thể được hợp lệ một mình mà không cần đến một DTD hay Schema.

Mặc dầu một tài liệu XML well-formed không cần có một Processing Instruction, nhưng thông thường ta để một Processing Instruction ở dòng đầu tài liệu, phần ấy được gọi là đoạn mở đầu. Dưới đây là một thí dụ có Processing Instruction trong đoạn mả đầu của một tài liệu XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<Order>

<OrderDate>2002-6-14</OrderDate>

<Customer>Helen Mooney</Customer>

<Item>

<ProductID>1</ProductID>

<Quantity>2</Quantity>

</Item>

<Item>

<ProductID>4</ProductID>

<Quantity>1</Quantity>

</Item>

</Order>

Có một loại Processing Instruction khác cũng rất thông dụng là cho biết tên của stylesheet (kiểu dáng) của XML nầy, thí dụ như:

<?xml-stylesheet type="text/xsl" href="order.xsl"?>

Ở đây ta cho XML stylesheet parser biết rằng stylesheet thuộc loại text/xsl và nó được chứa trong file tên order.xsl. Chúng ta cũng có thể cho thêm chú thích bằng cách dùng cặp Tags <!-- và --> như sau:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<!-- Below are details of a purchase order. -->

<Order>

<OrderDate>2002-6-14</OrderDate>

<Customer>Helen Mooney</Customer>

<Item>

<ProductID>1</ProductID>

<Quantity>2</Quantity>

</Item>

<Item>

<ProductID>4</ProductID>

<Quantity>1</Quantity>

</Item>

</Order>

Ngoài những vấn đề đề cập ở trên nhưng có một ý niệm rất quan trọng trong XML là Namespace (không gian tên). Nó cho ta cách cùng một tên của phần tử để nói đến hai thứ dữ liệu khác nhau trong cùng một tài liệu XML. Giống như có hai học sinh trùng tên Tuấn trong lớp học, ta phải dùng thêm họ của chúng để phân biệt, ta gọi Tuấn Trần hay Tuấn Lê. Thí dụ như có một order được người ta đặt trong tiệm sách như sau:

<?xml version="1.0"?>

<BookOrder OrderNo="1234">

<OrderDate>2001-01-01</OrderDate>

<Customer>

<Title>Mr.</Title>

<FirstName>Graeme</FirstName>

<LastName>Malcolm</LastName>

</Customer>

<Book>

<Title>Treasure Island</Title>

<Author>Robert Louis Stevenson</Author>

</Book>

</BookOrder>

Khi quan sát kỹ, ta thấy có thể có sự nhầm lẫn về cách dùng phần tử Title. Trong tài liệu có hai loại Title, một cái dùng cho khách hàng Customer nói đến danh hiệu Mr., Mrs., Dr., còn cái kia để nói đến đề tựa của một quyển sách Book.

Để tránh sự lầm lẫn, chúng ta có thể dùng không gian tên để nói rõ tên phần tử ấy thuộc về giòng họ nào. Giòng họ ấy là một Universal Resource Identifier (URI). Một URI có thể là một URL hay một chỗ nào định nghĩa tính cách độc đáo của nó. Một không gian tên cũng không cần phải nói đến một địa chỉ Internet, nó chỉ cần phải là có một, không hai.

Chúng ta có thể khai báo các không gian tên trong một phần tử bằng cách dùng thuộc tính xmlns (ns trong chữ xmlns là viết tắt cho namespace) chúng ta cũng có thể khai báo một không gian tên mặc định để áp dụng cho những gì nằm bên trong một phần tử, nơi chúng ta khai báo không gian tên. Thí dụ cái tài liệu đặt hàng có thể được viết lại như sau:

<?xml version="1.0"?>

<BookOrder OrderNo="1234">

<OrderDate>2001-01-01</OrderDate>

<Customer xmlns="http://www.northwindtraders.com/customer">

<Title>Mr.</Title>

<FirstName>Graeme</FirstName>

<LastName>Malcolm</LastName>

</Customer>

<Book xmlns="http://www.northwindtraders.com/book">

<Title>Treasure Island</Title>

<Author>Robert Louis Stevenson</Author>

</Book>

</BookOrder>

Ta đã tránh được sự nhầm lẫn vì bên trong Customer thì dùng namespace http://www.northwindtraders.com/customer và bên trong Book thì dùng namespace http://www.northwindtraders.com/book.

Tuy nhiên, ta sẽ giải quyết làm sao nếu trong order có nhiều customer và nhiều book. Nếu cứ thay đổi không gian tên hoài trong tài liệu thì rất khó khăn. Một cách giải quyết là khai báo chữ viết tắt cho các không gian tên ngay ở đầu tài liệu, trong phần tử góc (tức là phần tử tài liệu). Sau đó bên trong tài liệu ta sẽ sử dụng tiếp đầu ngữ cho các phần tử cần xác nhận không gian tên bằng chữ viết tắt của không gian tên của nó. Thí dụ như sau:

<?xml version="1.0"?>

<BookOrder xmlns="http://www.northwindtraders.com/order" xmlns:cust="http://www.northwindtraders.com/customer" xmlns:book="http://www.northwindtraders.com/book" OrderNo="1234">

<OrderDate>2001-01-01</OrderDate>

<cust:Customer>

<cust:Title>Mr.</cust:Title>

<cust:FirstName>Graeme</cust:FirstName>

<cust:LastName>Malcolm</cust:LastName>

</cust:Customer>

<book:Book>

<book:Title>Treasure Island</book:Title>

<book:Author>Robert Louis Stevenson</book:Author>

</book:Book>

</BookOrder>

Trong tài liệu XML trên ta dùng 3 không gian tên và một không gian tên mặc định. Không gian tên http://www.northwindtraders.com/order, namespace http://www.northwindtraders.com/customer (viết tắt là cust) và namespace http://www.northwindtraders.com/book (viết tắt là book). Các phần tử và các thuộc tính không có tiếp đầu (tức là không có chữ tắt đứng trước) như BookOrder, OrderNo, và OrderDate, được coi như thuộc về không gian tên mặc định. Để đánh dấu một phần tử hay thuộc tính không thuộc về không gian tên mặc định, một chữ tắt, đại diện không gian tên sẽ được gắn làm tiếp đầu ngữ cho tên phần tử hay thuộc tính. Thí dụ như cust:LastName, book:Title.

Trong tài liệu XML còn có CDATA, là khúc dữ liệu trong tài liệu XML nằm giữa

<![CDATA[ và ]]>. Dữ liệu nằm bên trong những CDATA được cho thông qua parser y nguyên, không bị sửa đổi. Điểm nầy rất quan trọng khi chúng ta muốn cho vào những dữ liệu có chứa những văn bản được xem như đánh dấu. Chúng ta có thể đặt những thí dụ cho XML trong những CDATA và chúng sẽ được parser bỏ qua. Khi dùng XSL stylesheets để transform một XML file thành HTML, có bất cứ scripting nào chúng ta cũng phải đặt trong những CDATA. Dưới đây là các thí dụ dùng CDATA:

<![CDATA[...place your data here...]]>

<SCRIPT>

<![CDATA[

function warning()

{

alert("Watch out!");

}]]>

</SCRIPT>

Dữ liệu trong XML không cho phép dùng một số ký hiệu đặc biệt. Do đó, XML yêu cầu chúng ta sử dụng một số cụm từ thay thế.

Cụm từ

Ý nghĩa

&apos;

dấu nháy trên

&amp;

dấu &

&gt;

dấu lớn hơn

&lt;

dấu nhỏ hơn

&quot;

dấu ngoặc kép

Có thể bạn quan tâm!

Xem toàn bộ 258 trang tài liệu này.


Chúng ta đã thấy cấu trúc và cú pháp của XML tương đối đơn giãn. XML cho ta một cách chuẩn để trao đổi tin tức giữa các computers. Bước tiếp theo là tìm hiểu cách nào một chương trình xử lý một tài liệu XML.

Dĩ nhiên để xử lý một XML chương trình ứng dụng phải có cách đi lại bên trong tài liệu để lấy ra các giá trị của các phần tử hay thuộc tính. Do đó người ta thiết kế ra ngôn ngữ XML Path language, mà ta gọi tắt là XPath. XPath đóng một vai trò quan trọng trong công tác trao đổi dữ liệu giữa các computers hay giữa các chương trình ứng dụng vì nó cho phép ta lựa chọn hay lọc ra những tin tức nào mình muốn để trao đổi hay hiển thị.

Nếu khi làm việc với cơ sở dữ liệu ta dùng cấu câu lệnh SQL Select .. from TableXYZ WHERE ... để trích ra một số bản ghi từ một table, thì khi làm việc với XML, một table dữ liệu nho nhỏ, XPath cho ta những biểu thức về điều kiện giống giống như mệnh đề WHERE trong SQL.

XPath là một chuẩn để xử lý XML, cũng giống như SQL là một chuẩn để làm việc với cơ sở dữ liệu. Tiên phuông trong việc triển khai các chương trình áp dụng XPath là công tác của các công ty phần mềm lớn như Microsoft, Oracle, Sun, IBM, v.v. Sở dĩ ta cần có một

chuẩn XPath là vì nó được áp dụng trong nhiều hoàn cảnh, nên cần phải có một lý thuyết rõ ràng, chính xác.

Lý thuyết về XPath hơi khô khan nhưng nó được áp dụng trong mọi kỹ thuật của gia đình XML. Cho nên chúng ta hãy kiên nhẫn 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 thì mình nhận diện và hiểu được. Chúng ta ta sẽ chỉ nghiên cứu những nội dung thường dùng trong XPath thôi, nếu chúng ta muốn có đầy đủ chi tiết về XPath thì có thể tham khảo chỉ định của nó tại địa chỉ http://www.w3c.org/TR/xpath.

Một tài liệu XML như một cây đối với XPath

XPath cho ta cú pháp để diễn tả cách đi lại trong XML. Ta coi một tài liệu XML như được đại diện bằng một tree (cây) có nhiều các nút. Mỗi phần tử hay thuộc tính là một nút. Để minh họa ý niệm nầy, chúng ta hãy quan sát tài liệu đặt hàng (order) XML sau:

<?xml version="1.0"?>

<Order OrderNo="1047">

<OrderDate>2002-03-26</OrderDate>

<Customer>John Costello</Customer>

<Item>

<Product ProductID="1" UnitPrice="70">Chair</Product>

<Quantity>6</Quantity>

</Item>

<Item>

<Product ProductID="2" UnitPrice="250">Desk</Product>

<Quantity>1</Quantity>

</Item>

</Order>

Ta có thể biểu diễn XML trên bằng một cây như dưới đây, trong đó nút phần tử màu nâu, nút thuộc tính màu xanh:

Chúng ta có thể dùng biểu thức XPath để chỉ định đường dẫn đến nút nút 1

Chúng ta có thể dùng biểu thức XPath để chỉ định đường dẫn đến nút (nút) nào hay trích ra (trả về) một hay nhiều nút thỏa đúng điều kiện yêu cầu. Biếu thức XPath có thể là tuyệt đối, tức là lấy nút gốc làm chuẩn hay tương đối, tức là khởi đầu từ nút vừa mới được chọn. Nút ấy được gọi là context nút (nút vai chính trong tình huống).

Có hai cách viết để diễn tả XPath, viết nguyên và viết tắt. Trong cả hai cách ta đều dùng dấu slash (/) để nói đến phần tử tài liệu, tức là nút gốc. Ta có thể đi lại trong các nút của Tree giống như các nút 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ệu như slash /, một 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 các nút con, cháu, chỉ định context nút, hay đi ngược lên các các nút tổ tiên.

Đường dẫn tuyệt đối

Chúng ta hãy tìm vài location paths trong cái Tree của tài liệu XML về đặt hàng nói trên. Muốn chọn cái nút của Phần tử Order (nó cũng là Root Phần tử) bằng cú pháp nguyên, ta sẽ dùng XPath Biểu thức sau đây:

/child::Order

Dịch ra cú pháp tắt, Biểu thức nầy trở nên:

/Order

Đi ra nhánh của Tree, ta sẽ tìm được nút Customer bằng cách dùng XPath Biểu thức

sau:


/child::Order/child::Customer

Sau đây là XPath Biểu thức viết tắt tương đương:

/Order/Customer

Nếu chúng ta muốn lấy ra một nút Thuộc tính, chúng ta phải nói rõ điều nầy bằng cách

dùng từ chìa khóa (keyword) thuộc tính trong cách viết nguyên hay dùng character @ trong cú pháp tắt. Do đó để lấy thuộc tính OrderNo của phần tử Order, ta sẽ dùng XPath Biểu thức sau:

/child::Order/thuộc tính::OrderNo

Cú pháp tắt cho Thuộc tính OrderNo là:

/Order/@OrderNo

Để trích ra các các nút con cháu, tức là các các nút nhánh xa hơn, ta dùng keyword descendant trong cú pháp nguyên hay một double slash (//) trong cú pháp tắt. Thí dụ, để lấy ra các các nút Product trong tài liệu, chúng ta có thể dùng Biểu thức location path sau:

/child::Order/descendant::Product Cú pháp tắt tương đương là:

/Order//Product

Chúng ta cũng có thể dùng wildcards (lá bài Joker) để nói đến những các nút mà tên của chúng không thành vấn đề. Thí dụ, dấu asterisk (*) wildcard chỉ định bất cứ nút tên nào. Location path sau đây chọn tất cả các các nút con của Phần tử Order:

/child::Order/child::*

Cú pháp tắt tương đương là:

/Order/*

Đường dẫn tương đối:

Nhiều khi XPath location paths là tương đối với context nút, trong trường hợp ấy location path diễn tả cách lấy ra một nút hay một số (set of) các nút tương đối với context nút. Thí dụ như, nếu Phần tử Item thứ nhất trong order là context nút, thì location path tương đối để trích ra Phần tử con Quantity là:

child::Quantity

Trong cú pháp tắt, location path tương đối là: Quantity

Tương tự như vậy, để lấy ra Thuộc tính ProductID của Phần tử con Product, cái location path tương đối là:

child::Product/thuộc tính::ProductID Biểu thức ấy dịch ra cú pháp tắt là: Product/@ProductID

Để đi ngược lên phía trên của Tree, ta dùng keyword parent (cha). Dạng tắt tương đương của keyword nầy là hai dấu chấm (..). Thí dụ nếu context nút là Phần tử OrderDate,

thì Thuộc tính OrderNo có thể được lấy ra từ Phần tử Order bằng cách dùng location path tương đối sau:

parent::Order/thuộc tính::OrderNo

Để ý là cú pháp nầy chỉ trả về một trị số khi nút cha tên Order. Nếu muốn lấy ra Thuộc tính OrderNo từ nút cha không cần biết nó tên gì chúng ta phải dùng Biểu thức sau:

parent::*/thuộc tính::OrderNo

Viết theo kiểu tắt đơn giản hơn vì chúng ta không cần phải cung cấp tên của nút cha.

Chúng ta có thể nói đến nút cha bằng cách dùng hai dấu chấm (..) như sau:

../@OrderNo

Ngoài ra, chúng ta có thể nói đến chính context nút bằng cách dùng hoặc keyword self hoặc một dấu chấm (.). Điều nầy rất tiện trong vài trường hợp, nhất là khi chúng ta muốn biết current context nút là nút nào.

Chúng ta có thể giới hạn số các nút lấy về bằng cách gắn thêm điều kiện sàng lọc vào location path. Cái điều kiện giới hạn một hay nhiều các nút được tháp vào Biểu thức bên trong một cặp ngoặc vuông ([]). Thí dụ, để lấy ra mọi Phần tử Product có Thuộc tính UnitPrice lớn hơn 70, chúng ta có thể dùng XPath Biểu thức sau đây:

/child::Order/child::Item/child::Product[thuộc tính::UnitPrice>70] Trong cú pháp tắt, nó là:

/Order/Item/Product[@UnitPrice>70]

Trong Biểu thức của điều kiện chúng ta cũng có thể dùng Xpath tương đối , do đó trong Biểu thức điều kiện chúng ta có thể dùng bất cứ nút nào trong thứ bậc. Thí dụ sau đây lấy về những các nút Item có Phần tử con Product với Attibute ProductID trị số bằng 1:

/child::Order/child::Item[child::Product/thuộc tính::ProductID=1] Dịch ra cú pháp tắt, ta có:

/Order/Item[Product/@ProductID=1]

Tập hợp các Các nút do XPath trả về được gọi là Collection. Thông thường trong lập trình, từ "Collection" được dùng để nói đến một tập hợp các objects đồng loại. Ta có thể lần lượt đi qua (iterate through) các objects trong một 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.

Trái lại, trong chuẩn XPath, khi một Collection được trả về bởi một XPath Query (hỏi), nó giữ nguyên thứ tự các Các nút và cấp bậc của chúng trong tài liệu XML. Tức là nếu XPath trả về một cành các các nút thì trừ những các nút không thỏa điều kiện, các nút còn lại vẫn giữ đúng vị trí trên cành.

Vì các thuộc tính của một phần tử không có thứ tự, nên chúng có thể nằm lộn xộn trong một Collection.

Một Collection của Các nút được xem như một Array. Muốn nói trực tiếp đến một Nút trong Collection ta có thể dùng một index trong cặp ngoặc vuông. Nút 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í dụ:

Biểu thức

Ý nghĩa

author[1]

Phần tử author đầu tiên.

author[firstname][3]

Phần tử author thứ ba có một phần tử con là firstname

Một location path dùng một Axis để chỉ định mối liên hệ giữa các Các nút được chọn đối với context nút. Sau đây là bảng liệt kê đầy đủ các axes:

Axes

Ý nghĩa

ancestor::

Tổ tiên của context nút.

Những tổ tiên của context nút gồm có cha, ông nội, ông cố .v.v., do đó ancestor:: axis luôn luôn kể cả root nút trừ khi chính context nút là root nút.

ancestor- or-self::

Chính context nút và tổ tiên của nó.

Cái ancestor-or-self:: axis luôn luôn kể cả root nút.

thuộc tính::

Các Thuộc tínhs của context nút.

Nếu context nút không phải là một Phần tử thì chắc chắn axis sẽ trống rỗng.

child::

Con cái của context nút.

Một con là bất cứ nút nào nằm ngay dưới context nút trong tree. Tuy nhiên, Thuộc tính hay Namespace các nút không được xem là con cái của context nút.

descenda

nt::

Con cháu của context nút.

Con cháu là con, cháu, chít, .v.v., do đó descendant:: axis không bao giờ chứa Thuộc tính hay Namespace các nút.

following::

Mọi các nút hiện ra sau context nút trên tree, không kể con cháu, Thuộc tính các nút, hay Namespace các nút.

following- sibling::

Mọi các nút em (nằm sau) context nút.

following-sibling:: axis nói đến chỉ những Các nút con, của cùng một Nút cha, nằm trên tree sau context nút. Axis không kể các Các nút anh nằm trước context nút.

Nếu context nút là Thuộc tính hay Namespace thì following-sibling:: axis sẽ trống rỗng.

namespac

e::

Những Namespace các nút của context nút.

Mỗi namespace có một namespace nút trong scope (phạm vi hoạt động) của context nút.

Nếu context nút không phải là một Phần tử thì Axis sẽ trống rỗng.

parent::

Nút cha của context nút, nếu nó có cha.

Nút cha là nút nằm ngay phía trên context nút trên tree.

preceding:

:

Mọi các nút hiện ra trước context nút trên tree, không kể các các nút tổ tiên, Thuộc tính các nút, hay Namespace các nút.

Một cách để nhận diện preceding:: axis là mọi các nút đã kết thúc hoàn toàn trước khi context nút bắt đầu.

preceding- sibling::

Mọi các nút anh (nằm trước) context nút.

preceding-sibling:: axis nói đến chỉ những Các nút con, của cùng một Nút cha, nằm trên tree trước context nút.

Nếu context nút là Thuộc tính hay Namespace thì preceding-sibling:: axis sẽ trống rỗng.

self::

Là chính context nút.


Như ta đã thấy ở trên, để giới hạn chỉ lấy ra những Các nút thỏa đáng một điều kiện, ta gắn một Filter (sàng lọc) vào Collection. Filter ấy là một Clause giống giống Clause WHERE trong ngôn ngữ SQL của cơ sở dữ liệu.

Nếu một Collection nằm giữa một filter, nó sẽ cho kết quả TRUE nếu Collection trả về ít nhất một Nút và FALSE nếu Collection trống rỗng (empty). Thí dụ Biểu thức author/degree có nghĩa rằng hàm biến đổi Collection ra trị số Boolean sẽ có giá trị TRUE nếu hiện hữa một Phần tử author có Phần tử con tên degree.

Filters luôn luôn được tính theo context của nó. Nói một cách khác, cái Biểu thức book[author] có nghĩa là cho mỗi Phần tử book tìm thấy, nó sẽ được thử xem có chứa một Phần tử con tên author không. Tương tự như vậy, book[author = 'Brown'] có nghĩa rằng cho mỗi Phần tử book tìm thấy, nó sẽ được thử xem có chứa một Phần tử con tên author với trị số bằng Brown không.

Ta có thể dùng dấu chấm (.) để khám current context nút. Thí dụ như, book[. = 'Dreams'] có nghĩa rằng cho mỗi Phần tử book tìm thấy trong current context, nó sẽ được thử xem có trị số bằng Dreams không. Dưới đây là một ít thí dụ:

Biểu thức

Ý nghĩa

Book[excerpt]

Mọi Phần tử book có chứa ít nhất một Phần tử excerpt.

Book[excerpt]/title

Mọi Phần tử title nằm trong những Phần tử book có chứa ít nhất một Phần tử excerpt.

Mọi Phần tử author có chứa ít nhất một Phần tử degree và nằm trong những Phần tử book có chứa ít nhất một Phần tử excerpt.

Book[author/degree]

Mọi Phần tử book có chứa ít nhất một Phần tử author với ít nhất một Phần tử degree con.

Book[excerpt][title]

Mọi Phần tử book có chứa ít nhất một Phần tử excerpt và ít nhất một Phần tử title.

Book[excerpt]/author[degree]

Để so sánh hai objects trong XPath ta dùng dấu (=) cho bằng nhau và (!= ) cho không bằng nhau. Mọi Phần tử và Thuộc tínhs là string, nhưng được Typecast (xem như ) những con số khi đem ra so sánh.

Biểu thức

Ý nghĩa

author[lastname = "Smith"]

Mọi Phần tử author có chứa ít nhất một Phần tử lastname với trị số bằng Smith.

author[lastname[1] = "Smith"]

Mọi Phần tử author có Phần tử lastname con đầu tiên với trị số bằng Smith.

author/degree[@from != "Harvard"]

Mọi Phần tử degree, là con một Phần tử author, và có một Thuộc tính from với trị số không phải là "Harvard".

author[lastname =

/editor/lastname]

Mọi Phần tử author có chứa một Phần tử lastname bằng với Phần tử lastname là con của root Phần tử editor.

author[. = "John Hamilton"]

Mọi Phần tử author có trị số string là John Hamilton.

Ngôn ngữ Xpath hỗ trợ Operator Union (phép toán hợp), giống như Logical OR (hoặc là). Dưới đây là vài thí dụ:

Biểu thức

Ý nghĩa

firstname | lastname

Mọi Phần tử firstname và lastname trong current context.

(bookstore/book |

bookstore/magazine)

Mọi Phần tử book hay magazine là con một Phần tử bookstore.

book | book/author

Mọi Phần tử book hay Phần tử author là con những Phần tử book.

(book | magazine)/price

Mọi Phần tử price là con của Phần tử book hay Phần tử magazine.

Để chọn những loại Nút khác hơn là Phần tử nút, ta dùng kiểu tra kiểu nút. Mục đích của việc dùng kiểm tra kiểu nút là để chỉ định sự lựa chọn khác thường. Thí dụ như, descendant::text() cho ta mọi text các nút là con cháu của context nút, dù rằng loại nút chính của con cháu context nút là Phần tử. Có 4 loại kiểu tra kiểu nút như liệt kê dưới đây.

Kiểu nút

Trả về

Thí dụ

comment()

Mọi comment nút.

following::comment() chọn mọi comment các nút hiện ra sau context nút.

nút()

Mọi nút.

preceding::nút() chọn mọi các nút hiện ra trước context nút.

processing- instruction()

Mọi processing instruction nút.

self::processing instruction() chọn mọi processing instruction các nút trong context nút.

text()

Mọi text nút.

child::text() chọn mọi text các nút là con của the context nút.

Xem tất cả 258 trang.

Ngày đăng: 19/11/2023
Trang chủ Tài liệu miễn phí