วิธีลบโหนดที่ไม่มีลูกด้วย Ruby และ Nokogiri

ฉันต้องการลบโหนดที่ไม่มีลูกที่เฉพาะเจาะจง

ตัวอย่างเช่น ฉันต้องการลบโหนด <release> ที่สองที่นี่:

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

ฉันได้ลองแล้ว: doc.xpath("//Release[album='']").remove แต่เห็นได้ชัดว่าไม่ได้ผลเพราะฉันต้องค้นหาโหนดที่ไม่มีอัลบั้มและไม่ใช่ตำแหน่งว่าง

ทางเลือกอื่นที่ฉันต้องการคือการคืนค่าบางอย่างเช่น "ว่าง" สำหรับโหนดใด ๆ ที่ไม่ได้รวมอัลบั้มไว้เมื่อฉันรันคำสั่งนี้ albums= doc.search('release/album').map{ |t| t.text}


person user1596069    schedule 17.04.2013    source แหล่งที่มา


คำตอบ (2)


คุณจะทำ:

doc.xpath('//release[not(album)]').remove
person pguardiario    schedule 17.04.2013
comment
ชวเลขสวยไม่มีความคิดเกี่ยวกับการไม่ มีประโยชน์มาก - person mhenrixon; 18.04.2013
comment
ขอบคุณมากครับ ง่ายมาก คำถามสั้นๆ อีกข้อหนึ่งหากคุณมีเวลา หากฉันต้องการตรวจสอบลูกหลายๆ คน ฉันจะต้องเขียนโค้ดแต่ละบรรทัดหรือไม่ หรือมีตัวเลือกเช่น doc.xpath('//release[not(album artist)]').remove หรือไม่ - person user1596069; 18.04.2013
comment
ควรเป็น: //release[not(album) or not(artist)] คุณสามารถใช้ or หรือ and - person pguardiario; 19.04.2013

person    schedule
comment
ใช้ Nokogiri::XML กับข้อมูล xml - person pguardiario; 19.04.2013
comment
@pguardiario มันสำคัญไหม? ฉันควรมีข้อดีอะไรบ้าง? ทำไมมันไม่ถูกต้อง? - person Arup Rakshit; 19.04.2013
comment
@pguardiario ใช่ฉันทำแล้ว แต่ข้อเสนอแนะในการปรับปรุงเป็นสิ่งที่ดี แต่ไม่ได้ลงคะแนนว่าใช้งานได้ - person Arup Rakshit; 20.04.2013
comment
ฉันเห็นด้วยกับสิ่งนั้นอย่างน้อย - person pguardiario; 21.04.2013