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.

Pankaj
sumber

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']
JLRishe
sumber
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']
rogerdpack
sumber
12

Coba lakukan ini:

/Employees/Employee[@id=4]/*/text()
Gilles Quenot
sumber
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