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

Đị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

74 322 0

Đ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

Tiêu đề Đị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
Tác giả Brett McLaughlin
Trường học Università Công nghệ Thông tin quốc gia Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại Báo cáo học thuật
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 74
Dung lượng 0,98 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đị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

Trang 1

Đị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

Trang 2

 W3C: World Wide Web Consortium

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

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

Trang 3

 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

Trang 4

Đặ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

Trang 5

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

Trang 6

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

Trang 7

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

<?xml version="1.0"?>

<!

* Licensed to the Apache Software Foundation (ASF) under one or more

* 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

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* 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

>

<!

===================================================================

Trang 8

Read the README file for build instruction

Authors:

Stefano Mazzocchi <stefano@apache.org>

Anupam Bagchi <abagchi@apache.org>

Andy Clark, IBM

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

==================================================================== >

<project default="usage" basedir=".">

<! Xerces Java directories >

<property name="build.dir" value="./build"/>

<property name="data.dir" value="./data"/>

<property name="docs.dir" value="./docs"/>

<property name="samples.dir" value="./samples"/>

<property name="src.dir" value="./src"/>

<property name="tests.dir" value="./tests"/>

<property name="tools.dir" value="./tools"/>

Trang 9

<! enable compilation under JDK 1.4 and above >

<taskdef name="xjavac" classname="org.apache.xerces.util.XJavac"> <classpath>

<property name='parser.Name' value='Xerces-J'/>

<property name='parser.name' value='xerces-j'/>

<property name='parser.shortname' value='xerces'/>

<property name='parser.Version' value='2.9.1'/>

<property name='parser.version' value='2.9.1'/>

Trang 10

<property name='parser_version' value='2_9_1'/>

<property name='deprecatedjar.parser' value='xerces.jar'/>

<property name='jar.apis' value='xml-apis.jar'/>

<property name='jar.parser' value='xercesImpl.jar'/>

<property name='jar.samples' value='xercesSamples.jar'/>

<property name='jar.dv' value='xercesDV.jar'/>

<property name='jar.resolver' value='resolver.jar'/>

<property name='jar.serializer' value='serializer.jar'/>

<property name='jar.junit' value='junit.jar'/>

<! Lots more properties here >

<!

=================================================================== >

<! Prepares the build directory >

<!

=================================================================== >

<target name="prepare" depends="init">

<mkdir dir="${build.dir}"/>

</target>

<!

=================================================================== >

Trang 11

<! directory creation and file copying common to all configurations >

<!

=================================================================== >

<target name="prepare-common" depends="prepare">

Trang 12

<copy file=

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

Trang 13

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:

Trang 14

<copy

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:

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

Trang 15

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

Trang 16

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 vuông @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ả

Trang 17

đượ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

Trang 18

đượ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

Trang 19

//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

Trang 21

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ừ

Trang 22

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

Trang 23

đơ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

Trang 24

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

Trang 25

//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

Trang 26

tại, bộ đánh giá tạo ra một tập các phần tử java Nhớ lại rằng tập của các

phần tử java xảy ra cho từng phần tử target từ các phần trước của biểu thức XPath Nếu cả ba phần tử phù hợp với //target[@depends] thì có ba tập hợp

của các nút được hiển thị ở bên phía phải

4 Cho từng tập hợp trong các tập hợp, bộ xử lý áp dụng vị tự [1] Vì thế mà phần tử đầu tiên trong mỗi tập hợp được trả lại Điều đó có nghĩa rằng nếu

ba nút được đánh giá xử lý thì có ba phần tử đầu tiên

Lựa chọn nút đầu tiên trong tập kết quả

Có thể bạn quan tâm xem làm thế nào để có thể lựa chọn được phần tử đầu tiên

trong tập kết quả cuối cùng Điều này thì lại rất đơn giản bởi vì XPath cho phép

bạn xác định thứ tự xử lý thông qua sử dụng dấu ngoặc đơn để có được kết quả phù hợp Ví dụ 9 hiển thị XPath cái mà hầu hết được xác định cho Ví dụ 8 nhưng đưa ra nhiều kết quả khác nhau

Ví dụ 9 Vị từ [1] được áp dụng để chỉ toàn bộ XPath

Trang 27

các kết quả đã có

Điều này là quá phức tạp Tại bất kỳ thời điểm nào bạn bao quanh từng phần của XPath theo hướng song song, khi đó từng phần của XPath được đánh giá đầy đủ trước khi áp dụng cho từng vị từ Chú ý rằng bạn có thể trình bày lại Ví dụ 9 dưới dạng như (//target[@depends]/java[1])[1] Tuy nhiên, vị từ [1] đầu tiên là không cần thiết ở đây

Cũng như thế bạn hãy nhớ rằng chỉ số đầu tiên trong tập hợp đối với tập nút trong

XPath luôn luôn là 1, chứ không phải 0

Lựa chọn phần tử cuối cùng trong tập hợp

Khi bạn muốn lựa chọn nút cuối cùng trong tập hợp có thể bạn không dùng đến toán tử số; chỉ số cuối cùng nào của tập hợp nút được xác định ở đây? Để nhận được nút cuối cùng bạn cần sử dụng một hàm của XPath, hàm đó là: last() Hàm last() đưa ra kết quả tương ứng với cái bạn mong chờ: Đó là nó trả lại nút cuối cùng trong tập hợp bạn đang áp dụng trên đó Ví dụ 10 là tương tự ví dụ trong Ví

dụ 8

Ví dụ 10 Vị từ last()] lựa chọn phần tử cuối cùng trongtập hợp

Trang 28

//target[@depends]/java[last()]

giống như Ví dụ 8 — và cái bạn nhìn thấy trong Hình 8 —trả lại nút cuối cùng từ

ba tập hợp nút khác nhau Kiểm tra Hình 10 để xem rõ kết quả này

Hình 10 Hàm [last()] thực hiện lựa chọn nút cuối cùng trong tập hợp

Ngay bây giờ, bạn không cần phải ngạc nhiên vì kết quả đó Thực tế, bạn có thể thực hiện các bước đơn giản trước đó và thay thế từ "first" trong bước thứ hai và bước cuối thành "last":

1 Bộ xử lý xác định tất cả các phần tử target ở bất kỳ vị trí nào trong tài liệu

2 Bộ xử lý thực hiện với vị từ [@depends] trước Bộ xử lý tạo tập nút mới chỉ chứa các phần tử target với các thuộc tính depends

Trang 29

3 Bộ xử lý thực hiện xử lý phần tiếp theo của XPath đó là java[1] Với mỗi phần tử trong tập hiện tại bộ xử lý đánh giá tập của các phần tử java Vì thế

ba tập hợp của các nút được nhìn thấy cùng lúc tại thời điểm này

4 Với mỗi tập hợp này bộ xử lý áp dụng vị từ [last()] Vì thế phần tử last trong từng tập hợp được trả lại Đây là các kết quả trong Ba phần tử cuối

cùng

5 Bộ xử lý thực hiện hợp tất cả các nút từ ba tập hợp vào thành một tập kết

quả riêng Kết quả là ba phần tử java trong đó cả ban phần tử last java đều

nằm dưới phần tử có tên target đó là phần tử có thuộc tínhdepends

Tương tự cách sử dụng của [1] bạn có thể áp dụng last() để cải tiến XPath sử dụng

xử lý song song như mô phỏng trong Ví dụ 11

Ví dụ 11 Vị từ [last()] được áp dụng để cải tiến XPath

(//target[@depends]/java)[last()]

Hình 11 hiển thị nút đơn cái được trả lại của biểu thức này

Hình 11 Bạn có thể sử dụng vị từ [last()] để lựa chọn nút cuối cùng trong tập

Trang 30

kết quả

Phải nhớ rằng, khi bạn sử dụng [1] hay [last()] trong toàn bộ biểu thức XPath thì kết quả của bạn sẽ luôn hoặc là nút đơn kết quả hoặc là không có nút nào

Không có hàm first()trong XPath

Có một hàm last() trong XPath nhưng không có tương ứng hàm first() Nếu mà có

hàm này để giải quyết vấn đề Internet Explorer đề cập trong Internet Explorer doesn't always handle [1] correctly Tuy nhiên, first() là có thể lấy ra kết quả đặc trưng của XPath bởi vì nó có thể không thực sự cần thiết Theo nguyên tắc xác

định vị từ [first()] có thể luôn luôn là tương đương với [1] vì thế không cần phải

thêm hàm first() cho ngôn ngữ lập trình

Trong bất kỳ trường hợp nào cảnh báo này —chỉ ra rằng first() không được coi là hàm XPath — bởi vì một vài bộ xử lý XPath bao gồm kể cả AquaPath đều không

có thông báo lỗi khi bạn sử dụng hàm này Vì vậy XPath giống như

(//target[@depends]/java)[first()] đơn giản trả lại tập nút rỗng

Tập hợp nút có thể rỗng hoặc mang một giá trị

Khi bạn sử dụng toán tử xác định vị trí trong vị từ bạn luôn luôn nhớ rằng không

có sự đảm bảo rằng tập nút có một hay nhiều nút thành viên Trong thực tế cũng không có đảm xác định rằng tập nút có chứa bất kỳ các nút thành viên nào Ví dụ xem XPath sau /project Xpath này thực hiện lựa chọn nút gốc của tài liệu ví dụ và

Trang 31

cũng theo định nghĩa mỗi tài liệu chỉ có duy nhất một nút gốc vì thế XPath

/project[1] và /project[last()] đều cùng trả lại chính xác cùng một phần tử: đó là tên của phần tử gốc project

Có thể gặp phải một chút ít rắc rối — nếu bạn không cẩn thận — khi áp dụng toán

tử vị trí trong tập phần tử rỗng Thử với ví dụ XPath /root cho cùng tài liệu ví dụ này Kết quả bạn thu được là tập rỗng bởi vì phần tử gốc có tên là project chứ không phải tên root Nếu bạn áp dụng vị từ định vị bạn có thể áp dụng hoặc chỉ số

dưới dạng 1 hoặc hàm giống như last() để áo dụng cho tập rỗng Kết quả không

phải là một lỗi mà đơn giản chỉ là tập rỗng Mấu chốt ở đâu đó là trong XPath các XPath riêng biệt có thể có nhiều vị từ và lỗi có thể chỉ xảy ra cho một vị từ tương ứng Trong trường hợp đó không hề có lỗi về mặt cú pháp mà tập nút rỗng không

có phần tử đầu và không có phần tử cuối XPath /root[1] sẽ trả lại giá trị là tập nút rỗng

Lý do có thể nhầm lẫn — một lần nữa, đặc biệt trong các XPath dài hơn — là bạn phải truy xuống chính xác nơi mà vấn đề xảy ra Ví dụ, đây là một XPath dài hơn: //target[@depends]/java[@fork]/classpath[@path]/pathelement[last()] Nếu XPath này trả lại một tập nút rỗng, làm thế nào để bạn nhận biết vấn đề xảy chỗ nào? Bất

cứ phần nào của XPath đều có thể trả lại một tập nút rỗng Nếu không có thành phần target có một thuộc tính depends, bạn nhận được một tập nút rỗng Nếu có, nhưng không có thành phần con tên là java, bạn cũng nhận được tập nút rỗng Nếu

có thành phần nút con java, nhưng không có nút nào có thuộc tính fork, bạn nhận được một tập nút rỗng, và cứ thế Tại mỗi thời điểm tính toán, nếu tập nút là rỗng, tất cả các phần còn lại của XPath sẽ hoạt động trên tập rỗng và do đó sẽ trả lại các tập rỗng (Trong ví dụ này, tập rỗng xảy ra khi classpath[@path] được ước lượng; không có thành phần classpath nào với thuộc tính có tên path trong tài liệu.)

Chọn một số nút bởi vị trí của chúng

Bạn cần biết một hàm quan trọng để sử dụng vị trí trong XPath của bạn: hàm position() Hàm position() trả lại chỉ số của một nút cụ thể trong tập hiện tại, và cho phép bạn sử dụng chỉ số đó trong XPath Ví dụ, bạn có thể chọn tất cả các nút

có vị trí lơn một chỉ số nào đó, hoặc tất cả các nút trừ nút ở một vị trí nào đó

Hàm position() trả lại một giá trị số

Xem xét XPath trong Ví dụ 12, nó không chỉ là cách dùng của hàm position(), mà còn đưa ra ví dụ so sánh đơn giản trong một vị từ

Trang 32

Ví dụ 12 Sử dụng hàm position() để chọn một phẩn của một tập các nút, dựa trên chỉ số của từng nút

//target/property[position() < 4]

Ví dụ này trả lại toàn bộ thành phần property, các thành phần này là thành phần con của thành phần target, và vị trí của chúng nhỏ hơn 4 trong tập các nút mà chúng nằm trong Xem kết quả trong Hình 12

Hình 12 So sánh hàm position() với một số

Trang 33

Ví dụ trong Ví dụ 12 che giấu tình huống có thể xảy ra khi sử dụng [1] và last():

Vị từ hoạt động trên tập nút hiện tại, chứ không phải toàn bộ XPath Trong trường hợp này, //target/property[position() < 4] hoạt động giống như

(//target/property)[position() < 4] (để ý ngoặc đơn trong XPath thứ hai), nên kết

quả trở về giống nhau Tuy nhiên, trở lại ví dụ XPath trong Ví dụ 8 và Ví dụ 10, hãy xem Ví dụ 13

Ví dụ 13 Áp dụng position() vào tập các nút hiện tại, không phải toàn bộ XPath

//target[@depends]/java[position() < 3]

Đối với người mới bắt đầu, dường như XPath này không thể trả về nhiều hơn hai nút: các nút tại vị trí 1 và 2 Bây giờ, vị từ ở cuối Ví dụ 13 áp dụng cho mỗi tập

các nút được nó xử lý Trong trường hợp này, nó và toàn bộ XPath không là một

Trong thực tế, Ví dụ 13 trả lại năm nút, chứ không phải hai Và không có gì là ngạc nhiên khi bạn có thể áp dụng một vị ngữ với hàm position() — như các vị ngữ khác —vào toàn bộ XPath với đóng mở ngoặc đơn Trong trường hợp này, bạn xem Ví dụ 14

Ví dụ 14 Bạn cũng có thể áp dụng hàm position() cho toàn bộ XPath

Trang 34

Ví dụ 15 Chọn tất cả các nút trừ nút đầu tiên trong tập hiện hành

Ví dụ 17 là một XPath hữu dụng; nó đưa ra một vị ngữ trả lại tất cả các nút trừ nút

cuối cùng trong tập hiện hành

Ví dụ 17 So sánh hàm position() với các hàm khác

//target[@depends]/java[position()

< last()]

Trong ví dụ này, hai hàm được sử dụng cùng nhau Hàm đầu tiên, position(), lấy

vị trí của nút đang được xử lý Hàm thứ hai, last(), lấy vị trí của nút cuối cùng

Trang 35

trong tập các nút đang được xử lý Hàm này được dùng rất nhiều khi tôi giải thích liên kết SQL-like trong XPath

Cuối cùng, tôi không nói quá lên rằng, các hàm vị trí này áp dụng cho tập các nút đang được đánh giá, chứ không phải cho tất cả các XPath (trừ khi thành phần trong ngoặc đang chạy) Bạn cần nhận thấy rằng có một vài tập nút khác đều có thể được mở và đánh giá, do đó các thuộc tính như [1] và [last()] có thể trả về nhiều hơn một nút đơn, và các thuộc tính như [position() < 2] và [position < last()]

có thể trả về số nút nhiều gấp hai hay ba lần số nút mà bạn mong muốn

position() trả lại một giá trị dạng số

Một cảnh báo cuối cùng trước khi bạn rời khỏi phần các thuộc tính vị trí này: Hàm position() trả về một số là chỉ mục của nút hiện tại Một thuộc tính chỉ chứa duy nhất chỉ mục của nút hiện tại sẽ trả về giá trị true Điều đó có nghĩa rằng thuộc tính

[position()]luôn luôn trả về giá trị true Kết quả cuối cùng là một XPath dạng như

//target[@depends]/java[position()] trả về cho các nút trong tập kết quả được đánh giá, và nó tương đương với XPath có thuộc tính cuối cùng bị bỏ đi:

//target[@depends]/java Hàm position(), sau đó, chỉ thực sự có giá trị khi được so sánh với một vị trí hoặc dựa vào một vị trí nào đó

Trang 36

So sánh và lọc các nút dựa trên các giá trị của thuộc tính của nút

Ở một mức độ nào đó, mọi thứ bạn nhìn thấy trong các thuộc tính chỉ là một sự khởi động cho các sự kiện chính trong các thuộc tính: việc so sánh các thuộc tính với các giá trị Trong khi việc kiểm tra các thuộc tính, các thành phần đã được lắp đặt, và vị trí của các nút là quan trọng, 90% các thuộc tính là sự so sánh của thuộc tính với các giá trị cụ thể

Phổ biến nhất trong loại này là việc so sánh một thuộc tính hoặc phần tử (element) với một giá trị bằng chữ, ví dụ như 32 hoặc init Tôi sẽ nói về những so sánh phức tạp hơn ở phần dưới, còn bây giờ chúng ta hãy xem xét những so sánh cơ bản trong một thuộc tính

Bộ lọc dựa trên giá trị của một thuộc tính

Bạn đã hiểu làm thế nào để chọn một thuộc tính trong một XPath Bạn nên sử dụng những cấu trúc kiểu như //target/@name Bạn cũng đã hiểu được cách để chọn một phần tử dựa trên thuộc tính của nó: //target[@name] Cả hai Xpath này đều có tác dụng như một hàm mũ khi bạn so sánh tên (name) của thuộc tính với một giá trị

So sánh các thuộc tính dựa trên đẳng thức

Giả sử rằng bạn muốn chọn một phần tử target có một tên (name) thuộc tính là init XPath trong trường hợp này là cái mà bạn mong muốn, nó nằm trong Ví dụ

18

Ví dụ 18 Bạn có thể so sánh một thuộc tính với một chuỗi ký tự

//target[@name='init']

Thuộc tính này làm hai thứ, một ngầm định (implicit), một rõ ràng (explicit):

1 Nó chỉ lựa chọn phần tử target với tên thuộc tính là name Nếu không có thuộc tính đó, việc so sánh sẽ bị bỏ qua và bất kỳ nút nào mà không có thuộc tính name thì sẽ bị loại ra khỏi tập các nút kết quả

Trang 37

2 Điều hiển nhiên xảy ra là: bộ đánh giá xpath (XPath evaluator) so sánh giá

trị value của thuộc tính name với chuỗi ký tự init Nếu các giá trị là trùng

khớp thì phần tử target cùng với thuộc tính đó sẽ được thêm vào tập kết quả

Kiểm tra lại XPath này; bạn nên xem một vài thứ như trong Hình 13 Hình 13

Hình 13 So sánh giá trị thuộc tính với các chuỗi ký tự

Các giá trị bạn so sánh nên đặt trong dấu ngoặc đơn Dùng dấu ngoặc kép thì việc

so sánh sẽ chính xác hơn, nhiên các đặc tả XPath thường được sử dụng trong trình duyệt Web, và giống như biểu thức JavaScript, XPath thường được đặt trong các ngoặc kép Bằng việc sử dụng dấu ngoặc đơn cho việc so sánh các giá trị, bạn sẽ tránh được việc bỏ qua một biểu thức được bắt đầu bởi ngoặc kép, ví dụ như một thuộc tính của HTML hoặc XHTML

So sánh các thuộc tính dựa trên bất đẳng thức

Bạn đã biết một số bất đẳng thức trong phần các thuộc tính vị trí (positional

predicates).Bạn cũng có thể sử dụng các toán tử đó để thực hiện so sánh Các toán

tử thường được sử dụng nhất là: nhỏ hơn (<), lớn hơn (>), nhỏ hơn hoặc bằng (<=), và lớn hơn hoặc bằng (>=) Các toán tử này thường được sử dụng với các thuộc tính có giá trị dạng số, như trong Ví dụ 19

Ngày đăng: 07/08/2014, 10:22

HÌNH ẢNH LIÊN QUAN

Hình 1. Stylus Studio cho phép đánh giá xác định biểu thức XPath - Đị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
Hình 1. Stylus Studio cho phép đánh giá xác định biểu thức XPath (Trang 5)
Hình 2. AquaPath cung cấp cách xử lý XPath trên Mac OS X - Đị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
Hình 2. AquaPath cung cấp cách xử lý XPath trên Mac OS X (Trang 6)
Hình 3. Cho phép chỉ lựa chọn phần tử copy với thuộc tính tệp - Đị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
Hình 3. Cho phép chỉ lựa chọn phần tử copy với thuộc tính tệp (Trang 16)
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 - Đị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
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 (Trang 19)
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 - Đị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
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 (Trang 20)
Hình 7. Biểu thức XPath có thể có nhiều hơn một vị từ - Đị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
Hình 7. Biểu thức XPath có thể có nhiều hơn một vị từ (Trang 22)
Hình 12. So sánh hàm position() với một số - Đị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
Hình 12. So sánh hàm position() với một số (Trang 32)
Hình 13. So sánh giá trị thuộc tính với các chuỗi ký tự - Đị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
Hình 13. So sánh giá trị thuộc tính với các chuỗi ký tự (Trang 37)
Hình 15. Kiểm tra xem giá trị thuộc tính có bắt đầu bởi một ký tự nhất định  nào không - Đị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
Hình 15. Kiểm tra xem giá trị thuộc tính có bắt đầu bởi một ký tự nhất định nào không (Trang 41)
Hình 16. Kiểm tra xem tên của một phần tử hoặc thuộc tính có bắt đầu bởi - Đị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
Hình 16. Kiểm tra xem tên của một phần tử hoặc thuộc tính có bắt đầu bởi (Trang 44)
Hình 21. Kiểm tra một vài phần tử hậu duệ (descendant elements) cho một  giá trị kiểu chuỗi - Đị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
Hình 21. Kiểm tra một vài phần tử hậu duệ (descendant elements) cho một giá trị kiểu chuỗi (Trang 65)
Hình 22. Lấy về tất cả PERSONAs mà nằm trong một PGROUP nhất định - Đị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
Hình 22. Lấy về tất cả PERSONAs mà nằm trong một PGROUP nhất định (Trang 70)
Hình 23. Tìm ra tất cả lời thoại SPEECHes được nói bởi người nói - Đị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
Hình 23. Tìm ra tất cả lời thoại SPEECHes được nói bởi người nói (Trang 71)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm