Ví dụ về truy vấn xpath tới html. Ứng dụng của trục trước. Hàm XPath tiêu chuẩn

Ví dụ về việc sử dụng xpath từ việc thực hành phân tích thông tin từ các trang web. Các phần của mã xpath được hiển thị.

Nhận văn bản tiêu đề h1

//h1/văn bản()

Nhận văn bản tiêu đề với lớp productName

//h1[@class="produnctName"]/text()

Nhận giá trị của một khoảng cụ thể theo lớp

//span[@class="price"]

Nhận giá trị thuộc tính tiêu đề cho một nút có lớp addtocart_button

//input[@class="addtocart_button"]/@title

//một văn bản()

//a/@href

hình ảnh src

//img/@src

Hình ảnh ngay sau đó yếu tố nhất định trong DOM, trục theo sau

//h1[@class="produnctName"]//following::div/img/@src

Hình ảnh trong 4 div theo tài khoản

//div/img/@src

XPath(Ngôn ngữ đường dẫn XML) - ngôn ngữ để truy vấn các thành phần tài liệu XML. Được thiết kế để cung cấp quyền truy cập vào các bộ phận tài liệu XML trong tập tin phép biến đổi XSLT và là một tiêu chuẩn W3C. XPath được thiết kế để triển khai điều hướng DOM trong XML.

XML có cấu trúc cây. Một phần tử cây luôn có con cháu và tổ tiên, ngoại trừ phần tử gốc, không có tổ tiên, cũng như các phần tử cụt (lá cây), không có con cháu.

Ở mỗi bước của đường dẫn, các phần tử được chọn đáp ứng các điều kiện lựa chọn ở bước này và do truy cập tài liệu dọc theo đường dẫn, sẽ thu được một tập hợp các phần tử thỏa mãn đường dẫn này.

Các hàm trên các tập hợp nút

  • * - biểu thị bất kì tên hoặc tập hợp các ký tự dọc theo trục được chỉ định, ví dụ: * - bất kỳ nút con nào; @* - bất kỳ thuộc tính nào.
  • $name - quyền truy cập vào một biến, trong đó tên là tên của biến hoặc tham số.
  • điều kiện bổ sung các mẫu hoặc, tương tự như vậy, một vị từ bước địa chỉ. Phải chứa giá trị boolean. Nếu nó chứa một giá trị số thì nó được coi là số sê-ri của nút, tương đương với việc thêm tiền tố vào số này bằng biểu thức “position()=”
  • () - nếu được sử dụng bên trong thẻ của ngôn ngữ khác (ví dụ HTML), thì bộ xử lý XSLT sẽ coi nội dung của dấu ngoặc nhọn là XPath.
  • / - xác định cấp độ của cây, tức là phân chia các bước đánh địa chỉ
  • | - kết hợp kết quả. Nghĩa là, bạn có thể viết một số đường dẫn phân tích cú pháp bằng dấu |. và kết quả của biểu thức như vậy sẽ bao gồm mọi thứ được tìm thấy bởi bất kỳ đường dẫn nào trong số này.
  • tập hợp nút nút()

Trả về tất cả các nút. Thay thế "*" thường được sử dụng thay cho hàm này, nhưng không giống như dấu hoa thị, hàm node() cũng trả về chữđiểm giao.

  • sợi dây chữ()

Trả về một tập hợp các nút văn bản;

  • tập hợp nút hiện hành()

Trả về một tập hợp gồm một phần tử là phần tử hiện tại. Nếu chúng ta đang xử lý một tập hợp có điều kiện thì cách duy nhất để tiếp cận phần tử hiện tại từ điều kiện này là hàm này.

  • con số chức vụ()

Trả về vị trí của một phần tử trong một tập hợp. Chỉ hoạt động chính xác trong một vòng lặp

  • con số cuối cùng()

Trả về số phần tử cuối cùng trong một tập hợp. Chỉ hoạt động chính xác trong một vòng lặp

  • con số đếm(bộ nút)

Trả về số phần tử trong một tập hợp nút.

  • sợi dây tên(bộ nút?)

Trả lại Họ và tên thẻ đầu tiên trong bộ.

  • sợi dây không gian tên-uri(bộ nút?)
  • sợi dây tên địa phương(bộ nút?)

Trả về tên của thẻ đầu tiên trong tập hợp, không có không gian tên.

  • tập hợp nút nhận dạng(sự vật)

Tìm một phần tử có mã định danh duy nhất

Trục là căn cứ Ngôn ngữ XPath. Một số trục có chữ viết tắt.

  • tổ tiên::- Trả về nhiều tổ tiên.
  • tổ tiên hoặc chính mình::— Trả về tập hợp tổ tiên và phần tử hiện tại.
  • thuộc tính::- Trả về tập thuộc tính của phần tử hiện tại. Cuộc gọi này có thể được thay thế bằng «@»
  • đứa trẻ::— Trả về một tập hợp con thấp hơn một cấp. Tên này được viết tắt hoàn toàn, nghĩa là có thể bỏ qua hoàn toàn.
  • hậu duệ::— Trả về tập hợp con đầy đủ (nghĩa là cả con trực tiếp và tất cả con của chúng).
  • hậu duệ hoặc chính mình::— Trả về tập hợp đầy đủ các phần tử con và phần tử hiện tại. Biểu thức "/descendant-or-self::node()/" có thể được rút ngắn thành «//» . Ví dụ: bằng cách sử dụng trục này, bạn có thể sắp xếp việc lựa chọn các phần tử từ bất kỳ nút nào chứ không chỉ từ nút gốc làm bước thứ hai: chỉ cần lấy tất cả các phần tử con của nút gốc làm bước đầu tiên là đủ. Ví dụ: đường dẫn "//span" sẽ chọn tất cả các nút span của tài liệu, bất kể vị trí của chúng trong hệ thống phân cấp, xem xét cả tên của phần tử gốc và tên của tất cả các nút con của nó, đến toàn bộ chiều sâu của chúng. làm tổ.
  • tiếp theo::— Trả về tập thô bên dưới phần tử hiện tại.
  • sau-anh chị em::— Trả về tập hợp các phần tử ở cùng cấp độ sau phần tử hiện tại.
  • không gian tên::— Trả về một tập hợp có không gian tên (nghĩa là có thuộc tính xmlns).
  • cha mẹ::— Trả tổ tiên trở lại một cấp. Cuộc gọi này có thể được thay thế bằng «..»
  • trước:— Trả về tập hợp các phần tử đã được xử lý không bao gồm tập hợp phần tử tổ tiên.
  • anh chị em trước::— Trả về tập hợp các phần tử ở cùng cấp độ trước phần tử hiện tại.
  • bản thân::- Trả về phần tử hiện tại. Cuộc gọi này có thể được thay thế bằng «.»

Xpath là ngôn ngữ truy vấn cho các phần tử tài liệu xml hoặc xhtml. Giống như SQL, xpath là ngôn ngữ truy vấn khai báo. Để có được dữ liệu quan tâm, bạn chỉ cần tạo một truy vấn mô tả dữ liệu này. Trình thông dịch ngôn ngữ xpath sẽ thực hiện tất cả công việc bẩn thỉu cho bạn.
Rất tiện lợi phải không? Hãy xem xpath cung cấp những khả năng gì để truy cập các nút trang web.

Tạo yêu cầu tới các nút trang web

Tôi xin trình bày với bạn một điều nhỏ công việc trong phòng thí nghiệm, trong thời gian đó tôi sẽ trình bày cách tạo yêu cầu xpath tới một trang web. Bạn sẽ có thể lặp lại các yêu cầu mà tôi đã đưa ra và quan trọng nhất là cố gắng thực hiện yêu cầu của riêng bạn. Tôi hy vọng nhờ đó mà bài viết sẽ thú vị không kém đối với những người mới bắt đầu và lập trình viên đã làm quen với xpath to xml.

Đối với phòng thí nghiệm, chúng tôi sẽ cần:
- trang web xhtml;
- Trình duyệt Mozilla Firefox với các tiện ích bổ sung;
- con bọ lửa;
- firePath;
(bạn có thể sử dụng bất kỳ trình duyệt nào khác có hỗ trợ xpath trực quan)
- một chút thời gian.

Là một trang web để tiến hành thử nghiệm, tôi đề xuất trang chính của trang web tập đoàn mạng toàn cầu("http://w3.org"). Chính tổ chức này đã phát triển các ngôn ngữ xquery(xpath), đặc tả xhtml và nhiều tiêu chuẩn Internet khác.

Nhiệm vụ
Nhận từ mã xhtml trang chủ thông tin w3.org về các hội nghị liên hiệp sử dụng truy vấn xpath.
Hãy bắt đầu viết truy vấn xpath.
Yêu cầu Xpath đầu tiên
Mở tab Firepath trong FireBug, chọn phần tử cần phân tích bằng bộ chọn, nhấp vào: Firepath đã tạo yêu cầu xpath cho phần tử đã chọn.

Nếu bạn chọn tiêu đề của sự kiện đầu tiên thì yêu cầu sẽ như sau:

Sau khi loại bỏ các chỉ mục không cần thiết, truy vấn sẽ khớp với tất cả các phần tử của loại tiêu đề.

Firepath làm nổi bật các phần tử phù hợp với truy vấn. Bạn có thể xem trong thời gian thực những nút tài liệu nào phù hợp với truy vấn.

Yêu cầu thông tin về địa điểm tổ chức hội nghị:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Đây là cách chúng tôi có được danh sách các nhà tài trợ:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

cú pháp xpath

Hãy quay lại các truy vấn mà chúng tôi đã tạo và hiểu cách chúng được cấu trúc.
Hãy xem xét yêu cầu đầu tiên một cách chi tiết

Trong truy vấn này, tôi đã chia ba phần để thể hiện khả năng của xpath. (Việc chia thành các phần rất phức tạp)

Phần đầu tiên
.// - gốc đệ quy không hoặc nhiều cấp độ phân cấp từ bối cảnh hiện tại. Trong trường hợp của chúng tôi, bối cảnh hiện tại là tài liệu gốc

Phần thứ hai
* - bất kỳ phần tử nào,
[@id="w3c_home_upcoming_events"]– một vị từ trên cơ sở đó chúng tôi tìm kiếm một nút có thuộc tính id bằng “w3c_home_upcoming_events”. ID phần tử XHTML phải là duy nhất. Do đó, truy vấn “bất kỳ phần tử nào có ID cụ thể” sẽ trả về nút duy nhất mà chúng tôi đang tìm kiếm.

Chúng ta có thể thay thế * đến tên nút chính xác div trong yêu cầu này
div[@id="w3c_home_upcoming_events"]

Vì vậy, chúng ta đi xuống cây tài liệu tới nút div[@id="w3c_home_upcoming_events"] mà chúng ta cần. Chúng tôi hoàn toàn không quan tâm cây DOM bao gồm những nút nào và có bao nhiêu cấp độ phân cấp ở trên.

Phần thứ ba
/ul/li/div/p/a–xpath là đường dẫn đến một phần tử cụ thể. Đường dẫn bao gồm các bước đánh địa chỉ và điều kiện kiểm tra nút (ul, li, v.v.). Các bước được phân tách bằng ký tự "/" (dấu gạch chéo).

bộ sưu tập xpath
Không phải lúc nào cũng có thể truy cập nút quan tâm bằng cách sử dụng các bước vị ngữ hoặc địa chỉ. Rất thường xuyên có nhiều nút cùng loại ở một cấp độ phân cấp và cần phải chọn nút “chỉ nút đầu tiên” hoặc “chỉ nút thứ hai”. Bộ sưu tập được cung cấp cho những trường hợp như vậy.

bộ sưu tập xpath cho phép bạn truy cập một phần tử theo chỉ mục của nó. Các chỉ mục tương ứng với thứ tự các phần tử được trình bày trong tài liệu gốc. Số sê-ri trong bộ sưu tập được tính từ một.

Dựa trên thực tế là “địa điểm” luôn là đoạn thứ hai sau “tên hội nghị”, chúng tôi nhận được truy vấn sau:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p
Trong đó p là phần tử thứ hai trong tập hợp cho mỗi nút trong danh sách /ul/li/div.

Tương tự, chúng ta có thể nhận được danh sách các nhà tài trợ với yêu cầu:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Một số hàm xpath
Có nhiều hàm trong xpath để làm việc với các phần tử trong một bộ sưu tập. Tôi sẽ chỉ đưa ra một vài trong số họ.

cuối cùng():
Trả về phần tử cuối cùng của bộ sưu tập.
Truy vấn ul/li/div/p - sẽ trả về các đoạn cuối cùng cho mỗi nút danh sách "ul".
Hàm first() không được cung cấp. Để truy cập phần tử đầu tiên, hãy sử dụng chỉ mục "1".

chữ():
Trả về nội dung kiểm tra của một phần tử.
.//a – chúng tôi nhận được tất cả các liên kết có nội dung “Lưu trữ”.

vị trí() và mod:
vị trí() - trả về vị trí của một phần tử trong một tập hợp.
mod là phần dư của phép chia.

Bằng cách kết hợp các chức năng này, chúng ta có thể nhận được:
- Không phần tử chẵn ul/li
- phần tử chẵn: ul/li

Hoạt động so sánh

  • < - логическое «меньше»
  • > - logic “lớn hơn”
  • <= - логическое «меньше либо равно»
  • >= - logic “lớn hơn hoặc bằng”
ul/li , ul/li - liệt kê các phần tử bắt đầu từ số thứ 3 và ngược lại.

Riêng mình

Hãy cố gắng để có được:
- thậm chí URL liên kết từ menu bên trái “Tiêu chuẩn”;
- tiêu đề của tất cả tin tức, ngoại trừ tin tức đầu tiên từ trang chính của w3c.org.

Xpath trong PHP5

$dom = DomDocument mới(); $dom->loadHTML($HTMLCode); $xpath = DomXPath mới($dom); $_res = $xpath->query(".//*[@id="w3c_home_upcoming_events"]/ul/li/div/p/a"); foreach($_res => $obj) ( echo "URL: ".$obj->getAttribution("href"); echo $obj->nodeValue; )

Cuối cùng

TRÊN ví dụ đơn giản Chúng tôi đã thấy sức mạnh của xpath trong việc truy cập các nút trang web.
Xpath là tiêu chuẩn công nghiệp để truy cập các phần tử xml và các phép biến đổi xhtml, xslt.
Bạn có thể sử dụng nó để phân tích bất kỳ trang html nào. Nếu mã html nguồn có lỗi nghiêm trọng trong phần đánh dấu, hãy chạy nó qua

Cú pháp viết tắt XPath

Các phím tắt cú pháp XPath có thể khá thuận tiện. Dưới đây là các quy tắc:

Self::node() có thể được rút ngắn thành. ;

Parent::node() có thể được viết tắt là.. ;

Child::childname có thể được viết tắt là childname ;

Thuộc tính::childname có thể được viết tắt là @childname ;

/descendant-or-self::node()/ có thể viết tắt là // .

Ví dụ: đường dẫn vị trí.//PLANET là viết tắt của self::node()/descendant-or-self::node()/child::PLANET . Bạn cũng có thể viết tắt biểu thức vị ngữ là , as , v.v. Làm việc với các đường dẫn XPath bằng cú pháp tốc ký dễ dàng hơn nhiều. Danh sách sau đây cung cấp một số đường dẫn vị trí mẫu sử dụng cú pháp rút gọn:

PLANET trả lại trẻ em Nút bối cảnh;

* trả về tất cả nút con của nút ngữ cảnh;

Text() trả về tất cả các nút văn bản con của nút ngữ cảnh;

@UNITS trả về thuộc tính UNITS của nút ngữ cảnh;

@* trả về tất cả các thuộc tính của nút ngữ cảnh;

PLANET trả lại đứa con thứ ba Nút bối cảnh;

PLANET trả lại đứa con cuối cùng Nút bối cảnh;

*/PLANET trả về tất cả các cháu Nút bối cảnh;

/PLANETS/PLANET/NAME trả về phần tử thứ hai yếu tố thứ ba yếu tố

// PLANET trả về tất cả trẻ em Gốc tài liệu;

PLANETS//PLANET trả về các phần tử con Yếu tố con Nút bối cảnh;

//PLANET/NAME trả về tất cả các phần tử ai có cha mẹ

Trả về chính nút ngữ cảnh;

.//PLANET trả về các phần tử con Nút bối cảnh;

Trả về nút gốc của nút ngữ cảnh;

../@UNITS trả về thuộc tính UNITS của nút gốc của nút ngữ cảnh;

.//.. trả về tất cả cha mẹ của nút con của nút ngữ cảnh và cha mẹ của nút ngữ cảnh;

PLANET mang những đứa trẻ trở lại ;

PLANET mang những đứa trẻ trở lại Các nút bối cảnh có con với văn bản bằng "Sao Kim";

PLANET[@UNITS="days"] trả về tất cả trẻ em Các nút ngữ cảnh có thuộc tính UNITS có giá trị “ngày”;

PLANET[@UNITS="days"] trả lại đứa con thứ sáu Nút ngữ cảnh chỉ khi nút con này có thuộc tính UNITS có giá trị "ngày". Bạn cũng có thể viết PLANET[@UNITS="days"] ;

PLANET[@COLOR và @UNITS] trả về tất cả trẻ em Các nút bối cảnh có Thuộc tính MÀU và thuộc tính UNITS;

" //PLANET " chọn tất cả các phần tử Giá trị của nó khác với giá trị của bất kỳ phần tử nào trước đó

* chọn bất kỳ phần tử nào ai là con đầu lòng của bố mẹ anh ta;

*[@UNITS] chọn năm nút con đầu tiên của nút ngữ cảnh có thuộc tính UNITS.

Từ cuốn sách Xử lý cơ sở dữ liệu trong Visual Basic®.NET tác giả McManus Geoffrey P

Từ cuốn sách Lập trình trong Ngôn ngữ Ruby[Tư tưởng ngôn ngữ, lý thuyết và thực tiễn ứng dụng] bởi Fulton Hal

Từ cuốn sách PHP Reference của tác giả

Từ cuốn sách XSLT tác giả Holzner Stephen

Cú pháp viết tắt Đối với các mẫu, có hai quy tắc để rút ngắn trục: child::childname có thể được rút ngắn thành tên con; attribute::childname có thể được rút ngắn thành @childname. Danh sách sau đây cung cấp một số mẫu mẫu với cú pháp rút gọn; ở cuối chương bạn sẽ thấy

Từ cuốn sách Công nghệ XSLT tác giả Valikov Alexey Nikolaevich

Cú pháp vị ngữ tốc ký Các biểu thức vị ngữ có thể được rút ngắn bằng cách bỏ qua "position()=". Ví dụ, trở thành, trở thành, v.v. Việc sử dụng cú pháp tốc ký giúp việc sử dụng các biểu thức XPath trong các vị từ trở nên dễ dàng hơn nhiều. Đây là một loạt bài

Từ cuốn sách C++. Bộ sưu tập công thức nấu ăn tác giả Diggins Christopher

Từ cuốn sách của tác giả

Số XPath XPath lưu trữ số ở định dạng dấu phẩy động độ chính xác gấp đôi. Theo định nghĩa chính thức, các số XPath phải được lưu trữ ở định dạng số dấu phẩy động có độ chính xác kép 64-bit của IEEE 754 và tất cả các số được lưu trữ dưới dạng số dấu phẩy động

Từ cuốn sách của tác giả

Sử dụng các trục XPath Tại thời điểm này, chúng ta đã xem xét ba phần của các bước bố cục - trục, điều kiện nút và vị từ. Bạn nên làm quen với những thành phần này từ công việc chúng ta đã thực hiện với các mẫu lựa chọn, nhưng hãy chú ý đến trục trong ví dụ trước - anh chị em đi trước. Vẫn

Từ cuốn sách của tác giả

Kiểm tra biểu thức XPath Gói Xalan bao gồm một chương trình ví dụ tiện dụng, ApplyXPath.java, cho phép bạn áp dụng biểu thức XPath cho tài liệu và xem kết quả, điều này rất hữu ích cho việc kiểm tra. Để chạy ví dụ này, bạn sẽ cần biên dịch ApplyXPath.java thành ApplyXPath.class tại

Ngày 2 tháng 3 năm 2011 lúc 08:49 chiều

Ví dụ về các yêu cầu xpath tới html

  • Phát triển trang web

Xpath là ngôn ngữ truy vấn cho các phần tử tài liệu xml hoặc xhtml. Giống như SQL, xpath là ngôn ngữ truy vấn khai báo. Để có được dữ liệu quan tâm, bạn chỉ cần tạo một truy vấn mô tả dữ liệu này. Trình thông dịch ngôn ngữ xpath sẽ thực hiện tất cả công việc bẩn thỉu cho bạn.
Rất tiện lợi phải không? Hãy xem xpath cung cấp những khả năng gì để truy cập các nút trang web.

Tạo yêu cầu tới các nút trang web

Tôi mang đến cho bạn sự chú ý về một công việc nhỏ trong phòng thí nghiệm, trong đó tôi sẽ trình diễn việc tạo các yêu cầu xpath cho một trang web. Bạn sẽ có thể lặp lại các yêu cầu mà tôi đã đưa ra và quan trọng nhất là cố gắng thực hiện yêu cầu của riêng bạn. Tôi hy vọng nhờ đó mà bài viết sẽ thú vị không kém đối với những người mới bắt đầu và lập trình viên đã làm quen với xpath to xml.

Đối với phòng thí nghiệm, chúng tôi sẽ cần:
- trang web xhtml;
- Trình duyệt Mozilla Firefox với các tiện ích bổ sung;
- con bọ lửa;
- firePath;
(bạn có thể sử dụng bất kỳ trình duyệt nào khác có hỗ trợ xpath trực quan)
- một chút thời gian.

Với tư cách là một trang web để tiến hành thử nghiệm, tôi đề xuất trang chính của trang web World Wide Web Consortium ("http://w3.org"). Chính tổ chức này đã phát triển các ngôn ngữ xquery(xpath), đặc tả xhtml và nhiều tiêu chuẩn Internet khác.

Nhiệm vụ
Truy xuất thông tin về các hội nghị liên hiệp từ mã xhtml của trang chính w3.org bằng truy vấn xpath.
Hãy bắt đầu viết truy vấn xpath.
Yêu cầu Xpath đầu tiên
Mở tab Firepath trong FireBug, chọn phần tử cần phân tích bằng bộ chọn, nhấp vào: Firepath đã tạo yêu cầu xpath cho phần tử đã chọn.

Nếu bạn chọn tiêu đề của sự kiện đầu tiên thì yêu cầu sẽ như sau:

Sau khi loại bỏ các chỉ mục không cần thiết, truy vấn sẽ khớp với tất cả các phần tử của loại tiêu đề.

Firepath làm nổi bật các phần tử phù hợp với truy vấn. Bạn có thể xem trong thời gian thực những nút tài liệu nào phù hợp với truy vấn.

Yêu cầu thông tin về địa điểm tổ chức hội nghị:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Đây là cách chúng tôi có được danh sách các nhà tài trợ:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

cú pháp xpath

Hãy quay lại các truy vấn mà chúng tôi đã tạo và hiểu cách chúng được cấu trúc.
Hãy xem xét yêu cầu đầu tiên một cách chi tiết

Trong truy vấn này, tôi đã chia ba phần để thể hiện khả năng của xpath. (Việc chia thành các phần rất phức tạp)

Phần đầu tiên
.// - đệ quy giảm xuống 0 hoặc nhiều cấp độ phân cấp từ bối cảnh hiện tại. Trong trường hợp của chúng tôi, bối cảnh hiện tại là tài liệu gốc

Phần thứ hai
* - bất kỳ phần tử nào,
[@id="w3c_home_upcoming_events"]– một vị từ trên cơ sở đó chúng tôi tìm kiếm một nút có thuộc tính id bằng “w3c_home_upcoming_events”. ID phần tử XHTML phải là duy nhất. Do đó, truy vấn “bất kỳ phần tử nào có ID cụ thể” sẽ trả về nút duy nhất mà chúng tôi đang tìm kiếm.

Chúng ta có thể thay thế * đến tên nút chính xác div trong yêu cầu này
div[@id="w3c_home_upcoming_events"]

Vì vậy, chúng ta đi xuống cây tài liệu tới nút div[@id="w3c_home_upcoming_events"] mà chúng ta cần. Chúng tôi hoàn toàn không quan tâm cây DOM bao gồm những nút nào và có bao nhiêu cấp độ phân cấp ở trên.

Phần thứ ba
/ul/li/div/p/a–xpath là đường dẫn đến một phần tử cụ thể. Đường dẫn bao gồm các bước đánh địa chỉ và điều kiện kiểm tra nút (ul, li, v.v.). Các bước được phân tách bằng ký tự "/" (dấu gạch chéo).

bộ sưu tập xpath
Không phải lúc nào cũng có thể truy cập nút quan tâm bằng cách sử dụng các bước vị ngữ hoặc địa chỉ. Rất thường xuyên có nhiều nút cùng loại ở một cấp độ phân cấp và cần phải chọn nút “chỉ nút đầu tiên” hoặc “chỉ nút thứ hai”. Bộ sưu tập được cung cấp cho những trường hợp như vậy.

bộ sưu tập xpath cho phép bạn truy cập một phần tử theo chỉ mục của nó. Các chỉ mục tương ứng với thứ tự các phần tử được trình bày trong tài liệu gốc. Số sê-ri trong bộ sưu tập được tính từ một.

Dựa trên thực tế là “địa điểm” luôn là đoạn thứ hai sau “tên hội nghị”, chúng tôi nhận được truy vấn sau:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p
Trong đó p là phần tử thứ hai trong tập hợp cho mỗi nút trong danh sách /ul/li/div.

Tương tự, chúng ta có thể nhận được danh sách các nhà tài trợ với yêu cầu:
.//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Một số hàm xpath
Có nhiều hàm trong xpath để làm việc với các phần tử trong một bộ sưu tập. Tôi sẽ chỉ đưa ra một vài trong số họ.

cuối cùng():
Trả về phần tử cuối cùng của bộ sưu tập.
Truy vấn ul/li/div/p - sẽ trả về các đoạn cuối cùng cho mỗi nút danh sách "ul".
Hàm first() không được cung cấp. Để truy cập phần tử đầu tiên, hãy sử dụng chỉ mục "1".

chữ():
Trả về nội dung kiểm tra của một phần tử.
.//a – chúng tôi nhận được tất cả các liên kết có nội dung “Lưu trữ”.

vị trí() và mod:
vị trí() - trả về vị trí của một phần tử trong một tập hợp.
mod là phần dư của phép chia.

Bằng cách kết hợp các chức năng này, chúng ta có thể nhận được:
- không có phần tử chẵn ul/li
- phần tử chẵn: ul/li

Hoạt động so sánh

  • < - логическое «меньше»
  • > - logic “lớn hơn”
  • <= - логическое «меньше либо равно»
  • >= - logic “lớn hơn hoặc bằng”
ul/li , ul/li - liệt kê các phần tử bắt đầu từ số thứ 3 và ngược lại.

Riêng mình

Hãy cố gắng để có được:
- ngay cả các liên kết URL từ menu bên trái “Tiêu chuẩn”;
- tiêu đề của tất cả tin tức, ngoại trừ tin tức đầu tiên từ trang chính của w3c.org.

Xpath trong PHP5

$dom = DomDocument mới(); $dom->loadHTML($HTMLCode); $xpath = DomXPath mới($dom); $_res = $xpath->query(".//*[@id="w3c_home_upcoming_events"]/ul/li/div/p/a"); foreach($_res => $obj) ( echo "URL: ".$obj->getAttribution("href"); echo $obj->nodeValue; )

Cuối cùng

Sử dụng một ví dụ đơn giản, chúng ta đã thấy khả năng của xpath trong việc truy cập các nút trang web.
Xpath là tiêu chuẩn công nghiệp để truy cập các phần tử xml và các phép biến đổi xhtml, xslt.
Bạn có thể sử dụng nó để phân tích bất kỳ trang html nào. Nếu mã html nguồn có lỗi nghiêm trọng trong phần đánh dấu, hãy chạy nó qua