Bagaimana cara menemukan URL tautan dengan teks tautan dengan XPath?

88

Saya memiliki halaman XHTML dalam format yang baik . Saya ingin mencari URL tujuan dari sebuah tautan ketika saya memiliki teks yang ditautkan.

Contoh

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

Saya ingin ekspresi XPath sedemikian rupa sehingga jika diberikan programming questions siteakan memberi http://stackoverflow.comdan jika saya memberikannya newsakan memberi http://cnn.com.

flybywire
sumber

Jawaban:

143

Seharusnya mirip dengan:

// a [text () = 'text_i_want_to_find'] / @ href
Badaro
sumber
75
akankah saya belajar xpath? ketika saya melihat kueri, itu sangat jelas dan mudah dimengerti ... tetapi saya tidak pernah bisa menulisnya sendiri
flybywire
4
@flybywire Jika Anda membaca kursus Pengantar Database gratis dari Stanford ini memiliki bagian yang bagus tentang XML dan XPath.
James P.
4
Sebagai ganti teks (), Anda dapat menggunakan ". =", Misalnya //a[.='Daftar di sini ']
danpop
1
Bagaimana jika saya tidak tahu teksnya? Bisakah saya memilih node yang berisi httpatau kata kunci tertentu?
Alston
78

Terlambat untukmu, tapi untuk orang lain dengan pertanyaan yang sama ...

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

Tentu saja, 'pemrograman' bisa berupa fragmen teks apa pun.

MaDeuce
sumber
1
Yang ini lebih umum. Bagian yang bagus
Aaron Gillion
Ini peka huruf besar / kecil. Bisakah saya mengabaikan kasus ini di sini?
pengguna3060430
9
//a[text()='programming quesions site']/@href 

yang pada dasarnya mengidentifikasi node jangkar <a>yang memiliki teks yang Anda inginkan, dan mengekstrak hrefatributnya.

Brian Agnew
sumber
6

Pikirkan frasa dalam tanda kurung siku sebagai klausa WHERE dalam SQL.

Jadi kueri ini mengatakan, "pilih atribut" href "(@) dari tag" a "yang muncul di mana saja (//), tetapi hanya di mana (frasa dalam tanda kurung) konten tekstual dari tag" a "sama dengan ' situs pertanyaan pemrograman '".

Baxter Tidwell
sumber
Hai Peter, apakah Anda memiliki situs tutorial untuk mempelajari kueri xpath?
Karim Narsindani
4

Untuk isi tidak peka huruf besar / kecil, gunakan yang berikut ini:

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

translate mengubah huruf besar dalam PEMROGRAMAN ke pemrograman huruf kecil.

Abdo
sumber
Harap jangan menambahkan "terima kasih" sebagai jawaban. Investasikan waktu di situs dan Anda akan mendapatkan hak istimewa yang cukup untuk memberi suara positif pada jawaban yang Anda suka, yang merupakan cara Stack Overflow untuk mengucapkan terima kasih.
Sklivvz
5
"Terima kasih" bukanlah "jawaban" saya. Saya, dengan cara, memberikan penghargaan untuk jawaban di atas yang saya tingkatkan.
Abdo
1

jika Anda menggunakan paket agility html gunakan getattributeValue:

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