問題の一部は、XML が違法であることです。<br>
終了していません。XML にするか<br/>
、終了タグ ( </br>
.
その結果、Nokogiri が XML を解析しようとするとエラーが発生します。解析後にメソッドを確認すると、次のerrors
ように表示されます。
[
#<Nokogiri::XML::SyntaxError: Premature end of data in tag br line 7>,
#<Nokogiri::XML::SyntaxError: Premature end of data in tag br line 7>,
#<Nokogiri::XML::SyntaxError: Premature end of data in tag br line 6>,
#<Nokogiri::XML::SyntaxError: Premature end of data in tag br line 6>,
#<Nokogiri::XML::SyntaxError: Premature end of data in tag en-note line 5>
]
これを修正すると、Nokogiri は XML を正しく処理できるようになります。その時点で、次のような簡単なことを実行できるようになります。
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml.dtd\">
<en-note>
<font size=\"5\">text_part_1</font><br/><br/>
<font size=\"5\">text_part_2</font><br/><br/>
<font size=\"5\">text_part_3</font>
EOT
doc.search('br').each do |br|
br.replace('##br##')
end
text = doc.content.gsub('##br##', '<br/>')
puts text
修正されたbr
タグを含む出力は次のとおりです。
text_part_1<br/><br/>
text_part_2<br/><br/>
text_part_3
XML を修正する最も簡単な方法は、解析する前に次のようなクリーンアップ コードを実行することです。
doc = Nokogiri::XML(xml.gsub('<br>', '<br/>'))
はxml
、XML コンテンツを含む変数です。