Saya mencoba mempelajari XPath. Saya melihat contains()
contoh lain di sekitar sini, tetapi tidak ada yang menggunakan operator DAN . Saya tidak bisa mengaktifkan ini:
//ul[@class='featureList' and contains(li, 'Model')]
Di:
...
<ul class="featureList">
<li><b>Type:</b> Clip Fan</li><li><b>Feature:</b> Air Moved: 65 ft.
Amps: 1.1
Clip: Grips any surface up to 1.63"
Plug: 3 prong grounded plug on heavy duty model
Usage: Garage, Workshop, Dorm, Work-out room, Deck, Office & more.</li><li><b>Speed Setting:</b> 2 speeds</li><li><b>Color:</b> Black</li><li><b>Power Consumption:</b> 62 W</li><li><b>Height:</b> 14.5"</li><li><b>Width:</b> Grill Diameter: 9.5"</li><li><b>Length:</b> 11.5"</li>
<li><b>Model #: </b>CR1-0081-06</li>
<li><b>Item #: </b>N82E16896817007</li>
<li><b>Return Policy: </b></li>
</ul>
...
Jawaban:
Anda hanya melihat
li
anak pertama dalam kueri yang Anda miliki alih-alih mencarili
elemen anak apa pun yang mungkin berisi teks'Model'
,. Yang Anda butuhkan adalah kueri seperti berikut:Query ini akan memberikan unsur-unsur yang memiliki
class
darifeatureList
dengan satu atau lebihli
anak yang mengandung teks,'Model'
.sumber
li
denganModel
dalamul
, makaand
kondisinya akan gagal. Jadiand
kondisinya kembalifalse
pada set kosong, apakah itu benar?Saya sudah memberi +1 saya untuk solusi Jeff Yates.
Berikut ini penjelasan singkat mengapa pendekatan Anda tidak berhasil. Ini:
menemukan batasan
contains()
fungsi (atau fungsi string lainnya di XPath, dalam hal ini).Argumen pertama seharusnya berupa string. Jika Anda memberinya daftar simpul (memberinya "
li
" melakukannya), konversi ke string harus dilakukan. Tetapi konversi ini dilakukan untuk simpul pertama dalam daftar saja.Dalam kasus Anda, simpul pertama dalam daftar adalah
<li><b>Type:</b> Clip Fan</li>
(dikonversi menjadi string: "Type: Clip Fan
") yang berarti bahwa ini:akan benar-benar memilih simpul!
sumber
Ini adalah jawaban baru untuk pertanyaan lama tentang kesalahpahaman umum tentang
contains()
di XPath ...Ringkasan:
contains()
berarti berisi substring , tidak mengandung simpul .Penjelasan detail
XPath ini sering disalahartikan:
Interpretasi yang salah: Pilih yang
ul
unsur-unsur yang mengandung sebuahli
elemen denganModel
di dalamnya.Ini salah karena
contains(x,y)
berharapx
menjadi string, danaturan XPath untuk mengonversi beberapa elemen menjadi string adalah ini :
Interpretasi yang tepat: Pilih orang-orang
ul
elemen yang pertamali
anak memiliki tali-nilai yang mengandung suatuModel
substring.Contohnya
XML
XPaths
//ul[contains(li, 'Model')]
memilihone
ul
elemen.Catatan: The
two
ul
Elemen tidak dipilih karena string-nilai yang pertamali
anak daritwo
ul
adalahFoo
, yang tidak mengandungModel
substring.//ul[li[contains(.,'Model')]]
memilih elemenone
dantwo
ul
.Catatan: Kedua
ul
elemen dipilih karenacontains()
diterapkan ke masingli
- masing individu. (Dengan demikian, aturan konversi multi-elemen-ke-string yang rumit dihindari.) Keduaul
elemen memang memilikili
anak yang nilai stringnya mengandungModel
substring - posisili
elemen tidak lagi penting.Lihat juga
sumber
sumber
Rekatkan
contains
contoh saya di sini:sumber
table
elemen atauEC_result
kelas dalam kode OP. Jawaban ini tidak masuk akal di sini dan harus dihapus.