Cara menghapus node anak yang hilang dengan Ruby dan Nokogiri

Saya ingin menghapus node yang tidak memiliki anak tertentu.

Misalnya, saya ingin menghapus node <release> kedua di sini:

<release>
 <artist>Johnny Cash</artist>
 <album>Live from Folsom Prison</album>
</release>
<release>
 <artist>Johnny Cash</artist>
</release>

Saya telah mencoba: doc.xpath("//Release[album='']").remove, tetapi jelas tidak berhasil karena saya perlu menemukan node di mana album tidak ada dan bukan di tempat yang kosong.

Alternatif yang saya perlukan adalah mengembalikan sesuatu seperti "kosong" untuk setiap node di mana album tidak disertakan ketika saya menjalankan perintah ini albums= doc.search('release/album').map{ |t| t.text}.


person user1596069    schedule 17.04.2013    source sumber


Jawaban (2)


Anda akan melakukan:

doc.xpath('//release[not(album)]').remove
person pguardiario    schedule 17.04.2013
comment
Singkatan yang bagus, tidak tahu tentang tidak. Sangat berguna - person mhenrixon; 18.04.2013
comment
Terima kasih banyak, sangat sederhana. Satu lagi pertanyaan singkat jika Anda punya waktu, jika saya ingin memeriksa beberapa anak, apakah saya perlu melakukan baris kode individual, atau adakah opsi seperti doc.xpath('//release[not(album artist)]').remove? - person user1596069; 18.04.2013
comment
Seharusnya: //release[not(album) or not(artist)] Anda dapat menggunakan or atau and - person pguardiario; 19.04.2013

person    schedule
comment
Gunakan Nokogiri::XML dengan data xml. - person pguardiario; 19.04.2013
comment
@pguardiario Apakah itu penting? apa keuntungan yang harus saya dapatkan dengan itu? kenapa itu tidak benar? - person Arup Rakshit; 19.04.2013
comment
@pguardiario Ya, benar. Namun saran perbaikan itu bagus, tetapi tidak menolak saran yang berhasil. - person Arup Rakshit; 20.04.2013
comment
Setidaknya saya setuju dengan itu. - person pguardiario; 21.04.2013