2013-08-27 38 views
18

tôi sử dụng Nokogiri cho phân tích các trang html với cùng một nội dung:Cách nhận văn bản nút không có con?

<p class="parent"> 
    Useful text 
    <br> 
    <span class="child">Useless text</span> 
</p> 

Khi tôi gọi trở về phương pháp page.css('p.parent').text Nokogiri 'viết văn bản vô dụng văn bản'. Nhưng tôi chỉ cần 'Văn bản hữu ích'.

Cách nhận văn bản nút không có con?

Trả lời

26

XPath bao gồm các thử nghiệm text() nút để lựa chọn các nút văn bản, vì vậy bạn có thể làm:

page.xpath('//p[@class="parent"]/text()') 

Sử dụng XPath để chọn lớp HTML có thể trở nên khá khó khăn nếu yếu tố trong câu hỏi có thể thuộc về nhiều hơn một lớp, vì vậy điều này có thể không lý tưởng.

May mắn thay Nokogiri thêm text() selector để CSS, vì vậy bạn có thể sử dụng:

page.css('p.parent > text()') 

để có được các nút văn bản đó là con trực tiếp của p.parent. Điều này cũng sẽ trả lại một số nút chỉ là whtespace, vì vậy bạn có thể phải lọc chúng ra.

+1

Bộ chọn văn bản() dường như là giải pháp sạch nhất. Cảm ơn bạn! –

0

Bạn sẽ có thể sử dụng page.css('p.parent').children.remove.

Sau đó, page.css('p.parent').text của bạn sẽ trả về văn bản mà không có nút con.

Lưu ý: page sẽ được sửa đổi bởi các remove