Tải bản đầy đủ (.pdf) (74 trang)

Định vị các phần cụ thể của tài liệu XML với XPath, Phần 2 Cải tiến kết quả của XPath sử dụng vị từ phù hợp pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1006.69 KB, 74 trang )

Định vị các phần cụ thể của tài liệu XML với XPath, Phần 2
Cải tiến kết quả của XPath sử dụng vị từ phù hợp
Brett McLaughlin , Tác giả, biên tập, O'Reilly Media
Tóm tắt: Phần 1 của bài viết này đã đưa cho bạn biết lợi ích của XPath. Cách sử
dụng ký tự dấu gạch chéo, các ký tự thay thế, tập hợp và văn bản đơn giản, đồng
thời bạn cũng học cách làm thế nào xác định được các phần tử và các thuộc tính ở
mọi vị trí của tài liệu XML. Tuy nhiên thỉnh thoảng có lúc bạn cần làm việc dựa
vào tên của nút trong tài liệu. Khi sử dụng các vị từ để thực hiện tìm kiếm bạn có
thể đánh giá được các giá trị của các thuộc tính và của nút cha và của các nút con
của phần tử mục tiêu. Hơn thế nó cho phép bạn tìm một tập hợp các nút mở rộng
và thực hiện cải tiến hay chọn lọc các cài đặt để bạn có thể thêm vào các khẳng
định để cho phép các XPaths của bạn tìm kiếm chính xác các nút bạn muốn.
Trước khi bạn bắt đầu
Nghiên cứu làm thế nào để nhận được bài viết này và làm thế nào để thực hiện nó.
Giới thiệu về bài viết này
Bài viết này tập trung mô tả chi tiết về XPath, cho phép bạn xác định các phần
khác nhau của tài liệu XML bằng cách sử dụng cú pháp dưới dạng thư mục. Bạn
sẽ học cú pháp của XPath và bạn sẽ làm việc với các công cụ để thực thi XPath
tương ứng. Đồng thời, sau khi bạn hoàn thành toàn bộ bài viết này bạn sẽ nắm
được các khái niệm cơ bản của XPath và bạn sẽ hiểu rõ hơn cách sử dụng XPath
trong các ứng dụng của bạn.

Các mục tiêu
Các từ viết tắt trong bài viết này


API: giao diện lập trình ứng dụng



HTML: Ngơn ngữ đánh dấu siêu văn bản





URI: Uniform Resource Identifier




W3C: World Wide Web Consortium



XHTML: Ngôn ngữ đánh dấu siêu văn bản mở rộng



XML: Ngôn ngữ đánh dấu mở rộng



XSL: Extensible Stylesheet Language



XSLT: XSL Transformations

Phần 2 của bài viết này tập trung vào việc sử dụng các vị từ và đưa ra các vị từ
phù hợp trong XPath của bạn. Bao gồm các lựa chọn XPath khác nhau được cung
cấp cho việc tìm kiếm của bạn. Nó cũng mơ tả cách làm thế nào xây dựng các vị
từ phức tạp thành tập câu lệnh phức tạp của các truy vấn bằng cách chỉ sử dụng cú

pháp XPath chuẩn.
Bạn cũng sẽ bắt đầu hiểu các ý tưởng ứng dụng của XPath và bạn cũng sẽ biết khi
nào XPath là lựa chọn tốt nhất so với công nghệ XML khác như XQuery. Cuối
cùng bạn sẽ biết cách làm việc với các kiểu dữ liệu đặc biệt khi bạn thực hiện so
sánh các giá trị thuộc tính có giá trị số.

Điều kiện tiên quyết
Những bài viết khác trong loạt bài viết này


Sử dụng XPath để định vị và lựa chọn các phần của tài liệu XML, Phần 1

Điều kiện cần thiết để bạn học bài viết này đó là bạn phải đã đọc và làm việc với
Phần 1 (xem Tài nguyên). Bài viết đó giới thiệu đầy đủ các khái niệm cơ bản của
XPath và cũng mô tả chi tiết về các nút và các thực hiện đánh giá các biểu thức
XPath từng phần từng phần một.
Thêm vào đó, bài viết này được viết bởi nhóm các tác giả và các lập trình về tài
liệu XML. Vì thế bạn cũng cần biết cách đọc, viết và thực thi với XML. Bạn cũng
nên có các khái niệm về XML, bao gồm:


Elements - Các phần tử hay còn gọi là các thành phần



Attributes - Các thuộc tính





Text - Văn bản



The root element - Phần tử gốc

Mặc dù không yêu cầu nhưng nếu bạn đã làm việc với DOM thì điều đó rất tốt để
giúp bạn hiểu về các nút. Nếu muốn nghiên cứu về DOM, ghé thăm Tài nguyên để
tìm kiếm một số đường dẫn liên quan. Đồng thời bạn cũng nên tìm hiểu rõ về các
phần liên quan đến nút trong Phần 1 của bài viết này.
Bài viết này sẽ đề cập đến và xác định một số API khác nữa bao gồm: XSL, XSLT
và XPath. Nếu có sự hiểu biết về từng phần này là rất tốt mặc dù không yêu cầu
bắt buộc. Để có nhiều thơng tin hơn về các phần này, ghé thăm Tài nguyên trong
bài viết này.


Đặt tham biến mơi trường cho ví dụ
Các tài liệu và cài đặt áp dụng cho bài viết này được sử dụng lại từ trong phần I vì
thế nếu bạn đã làm việc được trong Phần 1 thì chúng ta sẵn sàng để đến Phần 2.
Bạn cũng sẽ làm việc với tài liệu XML thông qua bài viết này. Bạn cần phải có tài
liệu để truy cập đến trong máy của bạn và phải nắm được cấu trúc cơ bản của tài
liệu tương ứng đó. Thêm vào đó bạn cũng cần có các cơng cụ để thực thi biểu thức
XPath của bạn và trả lại kết quả dựa trên lựa chọn của bạn. Phần này diễn tả làm
cách nào để có thể làm được các ví dụ của bài viết dựa trên phần mơi trường cá
nhân đã có.
Thật khơng may mắn công cụ để đánh giá xác định XPath là không được xác định
cho từng hệ thống xử lý khác nhau. Có một vài cơng cụ được tải xuống dưới dạng
tệp .EXE và chạy trên nền Microsoft® Windows® nhưng sẽ không làm việc được
trên Mac OS X. Tương tự, các công cụ để làm việc được trên hệ điều hành Mac
OS X nhưng không chạy được trên Windows. Trong khi bạn sử dụng các chương

tình Java™ và các lớp để tạo ra hệ thống độc lập với làm việc bài báo này thì tập
trung vào nghiên cứu XPaths hơn là tập trung vào nghiên cứu bấy kỳ các ngôn ngữ
lập trình khác
Theo như các phần trên đã hiển thị chi tiết cách làm thế nào để có được các cơng
cụ để làm việc với XPath trên cả Windows và Mác OS X. Bạn hãy chọn công cụ
mà bạn muốn sử dụng để làm. Mỗi một công cụ, tất cả các cú pháp và các ví dụ
hiển thị một cách đầy đủ vì thế bạn sẽ có được cơng cụ tương ứng của bạn để đánh
giá các biểu thức XPath.
Đánh giá các biểu thức XPath trên Windows
Một trong các công cụ tốt nhất để làm việc với XPath trên hệ điều hành Windows
đó là Stylus Studio (xem tại Tài nguyên để có đường dẫn tới trang Stylus Studio
Web và tải về). Tải bất kỳ một trong các phiên bản sau —Enterprise Suite,
Professional Suite, hay Home Edition— và cài đặt trên nền hệ điều hành tương
ứng
Mỗi khi bạn cài Stulus Studio bạn phải chắc chắn có thể xử lý được XPaths từ
phần đầu tiên của bài báo này; sau đó bạn sẽ biết các để sẵn sàng làm gì tiếp theo.
Kết quả màn hình của bạn sẽ có dạng như Hình 1.


Hình 1. Stylus Studio cho phép đánh giá xác định biểu thức XPath

Đánh giá biểu thức XPath trên hệ điều hành Mac OS X
Các công cụ để làm việc với XPath trên hệ điều anh Mác OS X— mà không sử
dụng lớp Java— là có ít cải tiến và tinh tế hơn so với làm việc trên hệ điều hành
Window. Hầu hết các công cụ được sử dụng là AquaPath, là phần mềm mã nguồn
mở và tải miễn phí (ghé thăm trang để tải về tại Tài nguyên). Tải AquaPath dưới
dạng ảnh của đĩa và đơn giản chỉ cần thực hiện di chuyển ứng dụng AquaPath từ
hình ảnh thể hiện vào thư mục ứng dụng Web của bạn.
Nháy đúp chuột vào ứng dụng AquaPath cài đặt mới, bạn sẽ nhìn thấy màn hình
có dạng giống như trong Hình 2.



Hình 2. AquaPath cung cấp cách xử lý XPath trên Mac OS X

Có thể trơng nó chưa giống nhiêu nhưng khi bạn bắt đầu tải các tài liệu XML và
đánh vào đó biểu thức XPath thì cơng cụ này —trơng giống như Stylus Studio—
khi thực hiện
Kiểm tra tài liệu XML
XPath là làm việc nhiều về XML so với bất kỳ ngơn ngữ lập trình nào khác. Vì thế
hầu hết các chương trình đều sử dụng XPath thơng qua các API kể từ Java hay C#
chính vì vậy bài viết này tập trung vào xử lý các XPath dựa trên tài liệu XML.
Chính vì thế mà nói rằng làm việc với tài liệu XML là làm việc với XPath. Để
phục vụ cho bài viết này thì bạn cần có tài liệu XML minh họa ngắn gọn (tầm
khoảng 50 dòng) và tài liệu này có một số các phần tử cũng như các thuộc tính
mang giá trị dữ liệu nào đó.
Ví dụ 1 hiển thị một phần của tài liệu XML được sử dụng, tài liệu này được Ant
xây dựng từ Apache Xerces2 Java Parser. Tài liệu này bao gồm nhiều nhưng trong
ví dụ này chỉ hiển thị tóm tắt. Tuy nhiên bạn có thể tải đầy đủ tài liệu XML từ Tài
nguyên.


Ví dụ 1. Tài liệu mẫu XML cho bài viết này

<?xml version="1.0"?>
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at

*
*

/>
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-->


Read the README file for build instruction.

Authors:
Stefano Mazzocchi <>
Anupam Bagchi

<>

Andy Clark, IBM

$Id: build.xml 567790 2007-08-20 19:16:53Z mrglavas $

====================================================================
-->



<!-- Xerces Java directories -->









<!-- enable compilation under JDK 1.4 and above -->
<taskdef name="xjavac" classname="org.apache.xerces.util.XJavac">
<classpath>

</classpath>
</taskdef>

<!-- Allow properties following these statements to be overridden -->






<target name="init">


















<!-- Lots more properties here... -->
-->


-->
<target name="prepare" depends="init">
<mkdir dir="${build.dir}"/>
</target>

-->





-->

<target name="prepare-common" depends="prepare">
<!-- create directories -->
<mkdir dir="${build.src}"/>
<mkdir dir="${build.dest}"/>
<mkdir dir="${build.dest}/META-INF"/>
<mkdir dir="${build.dest}/META-INF/services"/>

file="${src.dir}/org/apache/xerces/jaxp/javax.xml.parsers.DocumentBuilderFactory"
tofile="${build.dest}/META-INF/services/javax.xml.parsers.DocumentBuilderFactory"/>

file="${src.dir}/org/apache/xerces/jaxp/javax.xml.parsers.SAXParserFactory"
tofile="${build.dest}/META-INF/services/javax.xml.parsers.SAXParserFactory"/>

file="${src.dir}/org/apache/xerces/jaxp/datatype/javax.xml.datatype.DatatypeFactory"
tofile="${build.dest}/META-INF/services/javax.xml.datatype.DatatypeFactory"/>


"${src.dir}/org/apache/xerces/jaxp/validation/javax.xml.validation.SchemaFactory"
tofile="${build.dest}/META-INF/services/javax.xml.validation.SchemaFactory"/>


tofile="${build.dest}/META-INF/services/org.xml.sax.driver"/>

</target>
<!-- Lots more targets and tasks here... -->
</project>

Hãy đảm bảo rằng bạn đã có xerces-build.xml và cơng cụ XPath đã được cài đặt
và sẵn sàng sử dụng. Và bạn đã sẵn sàng để bắt đầu.


Thực hiện lựa chọn dựa vào các vị từ
Tất cả các XPath bạn đã viết trong phần 1 của bài viết này tập trung vài việc xác
định các nút trong từng bước tại một thời điểm khi bạn di chuyển đến nút địch. Ví
dụ, trong biểu thức XPath //target/copy/fileset, nút đích là fileset là nút chứa trong
phần tử copy, là nút được chứa trong phần tử target, với phần tử target được đặt ở
bất kỳ vị trí nào của tài liệu nguồn. Công việc này là thực hiện hiệu quả khi bạn
cần tìm tập hợp các nút được xác định dựa vào các phần tử hoặc các thuộc tính
(hoặc dựa vào cả nếu có thêm dấu |).
Tuy nhiên, XPaths cũng có giới hạn của nó. Chúng hữu dụng —và trong rất nhiều
trường hợp chúng là những gì bạn cần— nhưng chúng không thu được thuận lợi
của các thông tin trong tài liệu XML. Ví dụ, bạn khơng có cơng cụ để cho phép sử
dụng tất cả các giá trị của các thuộc tính trong tài liệu XML gốc. Bạn cũng khơng
có cách nào để sử dụng những kết quả trả lại tương ứng đó khi các phần tử chỉ có
thể là các thuộc tính hay các phần tử con. Bạn có thể trả lại các thuộc tính hay các
phần tử con bằng cách sử dụng XPath có dạng như sau //target/copy/*, cái này trả
lại các phần tử con của phần tử copy là các phần tử nằm trong các phần tử target.
Nhưng nếu bạn không muốn những phần tử con này? Nếu bạn muốn tất cả các
phần tử copy mà có chứa phần tử con?

Khi bạn muốn giới hạn hay chọn lọc các kết quả của bạn dựa trên điều kiện thông
qua tên của các phần tử và các thuộc tính và đường dẫn tới những phần từ và thuộc
tính bạn cần vị từ. Vị từ là một biểu thức rút gọn được nhúng vào cặp dấu ngoặc
vuông ([ và ]), đó là ký hiệu để chỉ đến một tập hợp nút trong biểu thức XPath của
bạn. Vị từ cho phép bạn cải tiến các XPath của bạn và thêm vào lượng lớn các
ràng buộc vào công cụ XPath.
Thêm chọn lựa cho thuộc tính và phần tử riêng rẽ
Biểu mẫu cơ bản nhất là nhận tập hợp nút và kiểm tra để xem có các nút nào có
các thuộc tính và các phần tử con.
Thêm chọn lựa cho thuộc tính riêng lẻ
Hỗ trợ bạn cách để tìm tất cả các phần tử copy nằm trong các phần tử target. Để
đơn giản hãy sử dụng XPath có dạng như: //target/copy. Tuy nhiên trong tệp mà
Ant xây dựng — có tên là xerces-build.xml, là tệp ví dụ của bài viết này— các
phần tử copy được chia làm hai dạng:


Phần tử rỗng: Có thuộc tính file và thuộc tính tofile, trong đó tệp dùng để
copy tạo thành tệp mới để sử dụng. Biểu mẫu này được cho dưới dạng như
sau:


file="${src.dir}/org/apache/xerces/parsers/org.xml.sax.driver"
tofile="${build.dest}/META-INF/services/org.xml.sax.driver"/>




Biểu mẫu với các phần tử con: Thuộc tính todir là năm trong phần tử
copy, nhưng các thông tin liên quan đến copy là trong các phần tử con.

Biểu mẫu này có dạng như sau:
<copy todir="${build.src}">
excludes="**/classfiles_updated **/CVS* **/.#*
**/XMLMessages.java
**/DatatypeContentModel.java **/ComplexTypeInfo.java
**/v1/** **/v2/**
javax.xml.parsers.ConvertToURI.java"> </fileset>
</copy>



Biểu thức XPath //target/copy trả lại cả hai trong số biểu mẫu này. Hơn thế nữa,
nếu bạn muốn khơi phục lại chính xác phần tử fileset nằm trong phần tử copy, bạn
có thể sử dụng XPath có dạng như //target/copy/fileset. Bạn cũng có thể nhanh
chóng khơi phục todir hay các thuộc tính file sử dụng XPath có dạng
//target/copy/@todir hay //target/copy/@file. Trong trường hợp này, bạn lựa chọn
hoặc biểu mẫu của copy với các phần tử con chứa bên trong (bằng việc lựa chọn
thuộc tính todir attribute) hoặc biểu mẫu rỗng (bằng việc lựa chọn thuộc tính file).
Trong cả hai trường hợp, các tập hợp nút kết quả vẫn chứa các thuộc tính, nhưng
phải các phần tử của copy.


Nhưng nếu muốn chỉ trả lại các phần tử copy với thuộc tính file? Khi đó cần phải
xác định cho phù hợp với từng nút mục tiêu tương ứng. Ví dụ 2 hiển thị cú pháp
để sử dụng vị từ để phù hợp thuộc tính.

Ví dụ 2. Lựa chọn các phần tử dựa trên sự tồn tại của thuộc tính
//target/copy[@file]


Di chuyển đến phần đầu và đánh biểu thức XPath vào trong bộ xử lý XPath của
bạn. Bạn sẽ nhận được các kết quả trơng có dạng như Hình 3.


Hình 3. Cho phép chỉ lựa chọn phần tử copy với thuộc tính tệp

Phần đầu tiên của XPath này trơng có dạng như: //target/copy. Phần tiếp theo là
đặt trong cặp dấu ngoắc vuông: [@file]. Dấu ngoắc vuông dùng để xác nhận. Điều
này có nghĩa rằng cái đó được đánh giá nhưng bộ xử lý thực hiện trên từng nút
trong tập nút trả lại bằng cách quãng XPath. Vì thế để có các nút được trả lại bằng
//target/copy, nút này được đánh giá một lần nữa bằng vị từ [@file]. Vị từ này chỉ
ra rằng bạn cần các thứ của có dạng khi bỏ cặp dấu đóng ngoặc vng @file. Biểu
thức XPath này chỉ định rằng làm việc với thuộc tính có tên file.
Sau đó đặt tất cả các phần này vào với nhau thì mỗi nút từ //target/copy được kiểm
tra để trả lại xem thuộc tính có phải có tên là file. Nếu kết quả là đúng thì tập hợp
các nút sẽ được trả lại trong tập kết quả. Nếu có bất kỳ các nút nào khơng có thuộc
tính file thì trả lại kết quả false và nút này sẽ bị từ chối. Vì thế tập các nút kết quả


được mơ phỏng trong Hình 3, Hình này chỉ hiển thị các phần tử copy mà bạn
muốn là các phần tử chứa thuộc tính file trong đó.
Cách làm là tương tự để nhận phần tử copy nhưng với các thuộc tính khác, giống
như thuộc tính todir. Ví dụ 3 Thể hiển cơng việc này.

Ví dụ 3. Lựa chọn các phần tử trên các thuộc tính tồn tại khác

//target/copy[@todir]

Thêm điều kiện kiểm tra cho từng phần tử con riêng biệt

Thực hiện kiểm tra các phần tử con là đơn giản hơn việc thực hiện kiểm tra các
thuộc tính. Với mục đích bạn cần tất cả các phần tử copy kèm với các phần tử con
fileset của nó. Tuy nhiên, khó có thể giả thiết rằng phần tử copy có các phần tử
con bởi vì nó có thể có cả các thuộc tính todir. Hơn thế nữa khi thực hiện kiểm tra
thuộc tính bạn muốn lựa chọn các phần tử copy dựa trên sự tồn tại của từng phần
tử con riêng biệt. Bạn có thể sử dụng XPath dưới dạng như trongVí dụ 4.

Ví dụ 4. Lựa chọn các phần tử dựa trên sự tồn tại của phần tử con

//target/copy[fileset]

Bạn sẽ nhận được các kết quả trong Hình 4. Chú ý rằng không phải tất cả các phần
tử copy đều được lựa chọn mà chỉ những phần tử được chỉ định là phần tử con mới
được chọn.

Hình 4. Chỉ các phần tử copy tương ứng tương ứng với phần tử con fileset


được lựa chọn

Rõ ràng nhận thấy rằng một tập hợp nút được sinh từ biểu thức XPath
//target/copy, sau đó vị từ [fileset] mới được áp dụng tiếp. Khi khơng có ký tự @,
từ fileset được hiểu rằng như phần tử con của tập phần tử hiện tại. Vì vậy tất cả
các phần tử copy gồm cả các phần tử con có tên fileset đều nhận giá trị true, và các
phần tử này được trả lại bởi biểu thức XPath. Các phần tử copy mà khơng có phần
tử con là sẽ khơng được trả lại.

Các vị từ có thể áp dụng cho nhiều mức lồng nhau
Bạn không bị giới hạn để có được các thuộc tính của tập hợp các nút trong ví dụ
hiện tại thậm chí cũng khơng giới hạn các phần tử con của phần tử đó. Điều đó có

nghĩa là thay vì muốn có các phần copy mà chứa phần tử con fileset, bạn cần chỉ
chính xác phần tử target mà contain những phần tử copy này. Vì vậy khi bạn
muốn tìm kiếm các phần tử target với các phần tử lồng copy, thì bạn cần phải xác
định được phần tử con lồng có tên là (fileset). Sự thực hiện này bạn có thể thấy rõ
trong Ví dụ 5.

Ví dụ 5. Lựa chọn các phần tử dựa trên sự tồn tại của các phần tử con


//target[copy/fileset]

Khi thực hiện ví dụ này, kết quả của bạn sẽ có dạng như Hình 5.

Hình 5. Biểu thức này thực hiện lựa chọn chỉ các phần tử copy với các con
lồng riêng biệt

Bạn có thể nhận được kết quả nhanh chóng bằng cách sử dụng các vị từ trong biểu
thức XPath của bạn. Từ đó bạn cũng có thể xây dựng được nhiều vị từ XPath phức
tạp hơn, ví dụ như trong Ví dụ 6.

Ví dụ 6. Các vị ngữ có thể có vài mức lồng nhau


//target[java/classpath/pathelement/@path]

Hình 6 hiển thị các kết quả tập hợp nút. Trong trường hợp này chỉ có một nút phù
hợp với tài liệu nguồn.

Hình 6. Các vị từ có thể kết hợp phần tử và các đường dẫn thuộc tính


XPaths có thể làm cho bản nản chí một chút đặt biệt khi mà vị từ là rất dài trong
một biểu thức XPath. Tuy nhiên nếu bạn thực hiện suy nghĩ từng bước từng bước
một bạn sẽ thấy có ít rắc rối để làm việc với chúng. Cuối cùng, vấn đề phức tạp có
thể xảy ra khi mà trả lại bất kỳ tập hợp các nút tương ứng của biểu thức XPath dài.
Với việc sử dụng vị từ và phần tử cũng như thuộc tính phù hợp bạn sẽ khơng mất
nhiều thời gian để kết thúc biểu thức XPath của bạn ở tại vị trí nút bạn muốn trả
lại.


XPath có thể có nhiều vị từ khác nhau
Một trong những mấu chốt chính của khóa học này là biểu thức XPath được tiến
hành đánh giá từng phần từng phần một. Với từng dấu gạch chéo bạn nhìn thấy thì
tập hợp nút được đánh giá và sau đó phần cịn lại của biểu thức XPath liên quan
đến các nút mới được đánh giá tiếp. Khi đó bạn thêm các vị từ vào để trộn chúng
lại với nhau mà không làm thay đổi giá trị. Vì lý do này bạn có thể thêm nhiều vị
tự vào coi như một phần của biểu thức XPath. Bạn dễ dàng thêm từng vị từ vào
tập hợp nút bạn muốn. Ví dụ 7 hiển thị XPath trở lên đơn giản khi sử dựng thêm
các vị từ.

Ví dụ 7. Các vị từ có thể lồng nhau ở một số mức

//target[@depends]/jar[metainf]

Tập nút kết quả được hiển thị trong Hình 7. Chú ý rằng khơng có phần tử gì đặc
biệt trong tập hợp nút này Chỉ có điều khác biệt duy nhất đó là bạn có thể thực
hiện trích lọc ở một số mức khác nhau của biểu thức XPAth.


Hình 7. Biểu thức XPath có thể có nhiều hơn một vị từ


Thực hiện XPath này từng bước từng bước một:
1. Xử lý tất cả các phần tử target mà khơng quan tâm đến vị trí xuất hiện của
phần tử đó trong tài liệu.
2. Với mỗi nút trong tập hợp đó, bộ xử lý thực hiện áp dụng vị từ [@depends].
Nếu nút có thuộc tính tên là depends thì bộ xử lý thêm nút đó vào tập kết
quả. Nếu khơng thì bỏ qua nút đó.
3. Với mỗi nút cịn lại, bộ xử lý kiểm tra để xem có bất kỳ phần tử con nào tên
là jar. Nếu có bộ xử lý cất giữ nút đó vào tập kết quả.
4. Với mỗi phần tử jar trong tập hợp kết quả bộ xử lý áp dụng vị từ [metainf]
vào đó. Vì thế phần tử jar có chứa phần tử con tên là metainf thì bộ xử lý
cất giữ nút đó trong tập kết quả.
5. Khi mà biểu thức XPath được thực hiện thành công bộ xử lý trả lại các nút
như là một phần của tập hợp.
Thực hiện tập các bước và các đánh giá đó, bộ xử lý được thực hiện là rất đơn
giản. Nó thường gồm hai biểu thức XPath khác nhau trong đó một là biểu thức với
vị từ và thực hiện kết hợp với biểu thức XPath thứ hai thành một biểu thức XPath


đơn. Lợi ích chính của việc thực hiện xử lý từng bước từng bước (hay từng phần
từng phần) của biểu thức XPath là: bạn có thể áp dụng bất kỳ vị từ nào cũng như
bất kỳ đường dẫn tại bất kỳ trạng thái nào bạn đều nhận được các kết quả dưới
dạng vị từ mà không quan tâm đến cú pháp mở rộng hay cú pháp ít sử dụng.


Lựa chọn các nút thơng qua vị trí của nó
Mỗi khi bạn thêm một vị từ vào hộp Xpath của bạn bạn sẽ mở ra cơ hội lớn hơn
cho việc lựa chọn. Vì thế bạn nên nghiên cứu cách làm thế nào để cải tiến tập các
nút của bạn dựa trê các thuộc tính và các phần tử con của nút đó. Một cách tiếp
cận đơn giản, trước tiên bạn tới thăm nút first trong danh sách, nút last, hoặc một
vài nút liên quan khác. Trong trường hợp này, bạn nên lựa chọn các nút không dựa

vào cấu trúc tài liệu XML nhưng dựa vào position của nút.
Đối với các nhà lập trình điều này thật phù hợp. Trong bất kỳ ngơn ngữ nào đều
hỗ trợ danh sách và vịng lặp, nó cho phép gộp phần tử vào một danh sách bằng
cách xác định vị trí tương ứng của phần tử được cho dưới dạng mảng chỉ số của
phương thức giống như firstChild() hay get(list.size()-1). XPath cung cấp vị trí
phù hợp trong các vị từ để cho phép bạn nhận được các nút cần thiết trong các
biểu thức XPath của bạn.
Lựa chọn phần tử đầu tiên hay phần tử cuối cùng
Để lựa chọn một phần tử từ một tập hợp cách đơn giản nhất là duyệt từ nút đầu
đến nút cuối của tập hợp. Bạn đã biết rằng XPath được đánh giá và trả lại kết quả
dưới dạng một tập hợp các nút nên vì thế bạn phải biết cách để nhận các nút thơng
qua vị trí của nó bằng cách sử dụng cú pháp dạng ký hiệu.
Lựa chọn phần tử đầu tiên trong tập hợp
Mỗi một tập hợp nút là cần một danh sách chỉ số tương ứng. Khi đó bạn có thể
truy cập tới từng phần tử trong tập hợp nút thông qua chỉ số dưới dạng vị từ. Để
nhận được phần tử đầu tiên trong tập hợp nút bạn áp dụ vị từ sau [1]. Ví dụ 8 thực
hiện khôi phục phần tử nút đầu tiên trong XPath.
Internet Explorer không phải luôn luôn hiểu được [1] một cách chính xác
Internet Explorer, từ phiên bản 5 đến này có hỗ trợ thực hiện XPath. Trong trình
duyệt này, Chỉ số 0 được áp dụng để chỉ tới phần tử đầu tiên trong tập hợp. Vì vậy
điều này có thể gây ra lỗi khi thực thi XPath trong trình duyệt. Cho nên bạn hãy
cẩn thận nếu muốn thực hiện đánh giá trực tiếp XPath trong Internet Explorer (rất
ít khi sử dụng), [1] Lựa chọn nút thứ hai; [0] lựa chọn nút đầu.

Ví dụ 8. Vị từ [1] cho phép lựa chọn phần tử đầu tiên trong tập hợp


//target[@depends]/java[1]

Thực hiện xử lý XPath này trong công cụ của bạn và bạn sẽ nhận được kết quả có

dạng như trong Hình 8.

Hình 8. Vị từ [1] cho phép lựa chọn phần tử đầu tiên trong tập hợp

Hãy thử xem khi một số được lựa chọn ở đây. XPath này sẽ trả lại ba nút!. Như
vậy, XPath tiến hành xử lý cùng lúc nhiều nút. Tìm hiểu kỹ biểu thức này và cũng
tìm hiểu cẩn thận xem điều gì xảy ra:
1. Bộ xử lý xác định được tất cả các phần tử target trong tài liệu. Tập nút được
bao gồm từng phần tử trong số đó và cả vị trí tương ứng của phần tử đó.
2. Bộ xử lý áp dụng vị từ đầu tiên [@depends]. Khi đó tập nút chỉ chứ các
phần tử target các thuộc tính depends được tạo ra.
3. Phần tiếp theo của XPath bắt đầu từ dấu gạch chéo (tại phần cuối của
//target[@depends]/) sau đó đến dấu gạch chéo tiếp theo, hay là đến phần
cuối của XPath. Điều đó có nghĩa là java[1]. Với mỗi phần tử trong tập hiện


×