2009-05-27 57 views
75

Tôi cũng có trang XHTML được tạo thành tốt. Tôi muốn tìm URL đích của liên kết khi tôi có văn bản được liên kết.Làm cách nào để tìm URL liên kết bằng văn bản liên kết với XPath?

Ví dụ

<a href="http://stackoverflow.com">programming questions site</a> 
<a href="http://cnn.com">news</a> 

Tôi muốn một biểu XPath như vậy mà nếu được programming questions site nó sẽ cho http://stackoverflow.com và nếu tôi cho nó news nó sẽ cho http://cnn.com.

Trả lời

123

nên được một cái gì đó tương tự như:

 
//a[text()='text_i_want_to_find']/@href 
+60

Tôi có bao giờ học xpath không? khi tôi nhìn thấy một truy vấn, nó rất rõ ràng và dễ hiểu ... nhưng tôi không bao giờ có thể viết một cái trên – flybywire

+3

@flybywire của riêng tôi Nếu bạn đọc khóa học Giới thiệu Cơ sở dữ liệu miễn phí của Stanford có một phần tốt về XML và XPath. –

+2

Thay vì văn bản(), bạn có thể sử dụng ". =", Ví dụ //a[.='Đăng ký tại đây '] – danpop

8
//a[text()='programming quesions site']/@href 

mà về cơ bản xác định một nút neo <a> có văn bản mà bạn muốn, và chiết xuất các thuộc tính href.

6

Hãy suy nghĩ cụm từ trong dấu ngoặc vuông làm mệnh đề WHERE trong SQL.

Vì vậy, truy vấn này cho biết, "chọn thuộc tính" href "(@) của thẻ" a "xuất hiện ở bất kỳ đâu (//), nhưng chỉ ở đâu (cụm từ được gắn ngoặc) nội dung văn bản của thẻ" a " bằng 'trang web câu hỏi lập trình' ".

+0

Xin chào Peter, bạn có trang web hướng dẫn nào để tìm hiểu truy vấn xpath không? –

62

Quá muộn cho bạn, nhưng đối với bất cứ ai khác với cùng một câu hỏi ...

//a[contains(text(), 'programming')]/@href 

Tất nhiên, 'lập trình' có thể là bất kỳ đoạn văn bản.

+1

Cái này được tổng quát hơn. Chia sẻ tốt –

1

nếu bạn đang sử dụng html nhanh nhẹn getattributeValue sử dụng gói:

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","") 
3

Đối với trường hợp không nhạy cảm chứa, sử dụng như sau:

//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href 

dịch chuyển chữ in hoa trong lập trình để lập trình chữ thường.

+0

Vui lòng không thêm "cảm ơn" làm câu trả lời. Đầu tư một số thời gian trong trang web và bạn sẽ đạt được đủ [đặc quyền] (http://stackoverflow.com/privileges) để upvote câu trả lời mà bạn thích, đó là cách Stack Overflow nói cảm ơn bạn. – Sklivvz

+5

"Cảm ơn" không phải là "câu trả lời" của tôi. Tôi đã, theo một cách, đưa ra tín dụng cho câu trả lời ở trên mà tôi đã cải thiện. – Abdo

Các vấn đề liên quan