XPath untuk memilih Elemen dengan nilai atribut


195

Saya telah mengikuti XML.

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee id="3">
        <age>40</age>
        <name>Tom</name>
        <gender>Male</gender>
        <role>Manager</role>
    </Employee>
    <Employee id="4">
        <age>25</age>
        <name>Meghna</name>
        <gender>Female</gender>
        <role>Manager</role>
    </Employee>
</Employees>

Saya ingin memilih elemen Karyawan dengan id = "4".

Saya menggunakan ekspresi XPath di bawah ini yang tidak mengembalikan apa pun.

//Employee/[@id='4']/text()

Saya memeriksanya di http://chris.photobooks.com/xml/default.htm dan dikatakan xpath tidak valid, tidak yakin di mana masalahnya.

Jawaban:


278

Anda harus menghapus /sebelum [. Predikat (bagian dalam [ ]) seharusnya tidak memiliki garis miring segera sebelum mereka. Juga, untuk memilih elemen Karyawan itu sendiri, Anda harus meninggalkan /text()di akhir atau kalau tidak Anda hanya akan memilih nilai teks spasi langsung di bawah elemen Karyawan.

//Employee[@id='4']

Sunting: Seperti yang Jens tunjukkan dalam komentar, //bisa sangat lambat karena mencari seluruh dokumen untuk menemukan simpul yang cocok. Jika struktur dokumen yang Anda kerjakan akan konsisten, Anda mungkin lebih baik menggunakan path lengkap, misalnya:

/Employees/Employee[@id='4']

3
Perhatikan bahwa //memilih dan mencari semua simpul dokumen yang bisa lambat. Sebaliknya, jika struktur dokumen diketahui maka gunakan jalur yang benar, seperti yang disarankan dalam jawaban Gilles di bawah ini.
— Jens

@ Jens Ya, itu benar sekali. Saya telah mengedit jawaban saya untuk menambahkan addendum.
— JLRishe

13

Sebagai tindak lanjut, Anda dapat memilih "semua node dengan atribut tertentu" seperti ini:

//*[@id='4']

12

Coba lakukan ini:

/Employees/Employee[@id=4]/*/text()

apakah xmllint memuat seluruh file xml ke dalam memori sebelum mencari id ?. Saya memiliki file xml 46 GB dan saya mencari id di dalamnya
— Hani Goc

file xml dari 46 GB - ada masalah.
— Gurwinder Singh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.