Đây là những gì tôi muốn làm:
Phân tích một số XML đầu tiên:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="nutrition.css"?>
<nutrition>
<daily-values>
<total-fat units="g">65</total-fat>
<saturated-fat units="g">20</saturated-fat>
<cholesterol units="mg">300</cholesterol>
<sodium units="mg">2400</sodium>
<carb units="g">300</carb>
<fiber units="g">25</fiber>
<protein units="g">50</protein>
</daily-values>
<food>
<name>Avocado Dip</name>
<mfr>Sunnydale</mfr>
<serving units="g">29</serving>
<calories total="110" fat="100"/>
<total-fat>11</total-fat>
<saturated-fat>3</saturated-fat>
<cholesterol>5</cholesterol>
<sodium>210</sodium>
<carb>2</carb>
<fiber>0</fiber>
<protein>1</protein>
<vitamins>
<a>0</a>
<c>0</c>
</vitamins>
<minerals>
<ca>0</ca>
<fe>0</fe>
</minerals>
</food>
</nutrition>
EOT
Nếu tôi muốn xóa nội dung của nút, tôi có thể xóa ove nó children
hoặc gán nil nội dung của nó:
doc.at('total-fat').to_xml # => "<total-fat units=\"g\">65</total-fat>"
doc.at('total-fat').children.remove
doc.at('total-fat').to_xml # => "<total-fat units=\"g\"/>"
hay:
doc.at('saturated-fat').to_xml # => "<saturated-fat units=\"g\">20</saturated-fat>"
doc.at('saturated-fat').content = nil
doc.at('saturated-fat').to_xml # => "<saturated-fat units=\"g\"/>"
Nếu tôi muốn trích xuất văn bản từ một nút để sử dụng một số cách khác:
food = doc.at('food').text
# => "\n Avocado Dip\n Sunnydale\n 29\n \n 11\n 3\n 5\n 210\n 2\n 0\n 1\n \n 0\n 0\n \n \n 0\n 0\n \n "
hoặc :
food = doc.at('food').children.map(&:text)
# => ["\n ",
# "Avocado Dip",
# "\n ",
# "Sunnydale",
# "\n ",
# "29",
# "\n ",
# "",
# "\n ",
# "11",
# "\n ",
# "3",
# "\n ",
# "5",
# "\n ",
# "210",
# "\n ",
# "2",
# "\n ",
# "0",
# "\n ",
# "1",
# "\n ",
# "\n 0\n 0\n ",
# "\n ",
# "\n 0\n 0\n ",
# "\n "]
hoặc bất kỳ cách nào khác bạn muốn xé văn bản.
Và, nếu bạn muốn đánh dấu mà bạn đã xóa đoạn Phúc Âm:
doc.at('food').content = 'REMOVED'
doc.at('food').to_xml # => "<food>REMOVED</food>"
Bạn cũng có thể sử dụng một bình luận XML thay vì:
doc.at('food').children = '<!-- REMOVED -->'
doc.at('food').to_xml # => "<food>\n <!-- REMOVED -->\n</food>"
Nokogiri của Hướng dẫn cho [Sửa đổi một HTML/XML Tài liệu] (http://nokogiri.org/tutorials/modifying_an_html_xml_document.html) đề cập đến điều này. Ngoài ra 'node.unlink' sẽ xóa nó khỏi DOM. –
Xem "[yêu cầu]". Như vậy, đây là thiếu thông tin quan trọng như một ví dụ XML tối thiểu cho đầu vào và đầu ra dự kiến, cộng với mã được viết để giải quyết vấn đề. –