HTTPPartyを使用していて、手に入る前に入力XMLを解析しようとしている場合は、そのプロセスをgetと解析に分割する必要があります。二。
これらの理由からOpenURIとNokogiriを使用していますが、これらの2つを使用するか、それと同等のものを使用する場合でも、解析前にXMLを前処理する機会があります。 '&
'は裸のときは不正な文字です。それはコード化されているかCDATAブロックであるべきですが、残念なことにインターネットの野生では、不正な形式のXMLフィードやファイルがたくさんあります。
この仕事のためにノコギリが好きなのは、少なくともできるだけ頑張っているということです。あなたは、文書が解析された後にエラーがあったかどうかを確認するために見ることができ、あなたはtweak some of its parser settingsはそれが何をするかを制御または文句を言うことができますについて:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<a>
<b parm="4860 BOOMM 10x20 MD&">foobar</b>
</a>
EOT
puts doc.errors
puts doc.to_xml
どちらの出力は以下となります。
xmlParseEntityRef: no name
<?xml version="1.0"?>
<a>
<b parm="4860 BOOMM 10x20 MD">foobar</b>
</a>
お知らせその鋸山&
を取り除いたが、私はまだ使用可能な出力を得ることができた。エラーを表示し、STRICT
オプションを使用して停止するか続行するかを決定する必要がありますが、必要に応じてNokogiriがどちらかを実行できます。/
<?xml version="1.0"?>
<a>
<b parm="4860 BOOMM 10x20 MD&">foobar</b>
</a>
私は、これは完璧な答えではないですけど、私の経験からRSSの多くを扱う:今出力
require 'nokogiri'
xml = <<EOT
<a>
<b parm="4860 BOOMM 10x20 MD&">foobar</b>
</a>
EOT
xml['MD&'] = 'MD&'
doc = Nokogiri::XML(xml) do |config|
config.strict
end
puts doc.errors
puts doc.to_xml
:
あなたは、着信XMLをマッサージすることができますAtomやXML/HTML解析では、時にはダーティ・トリック・バッグを開いて、エレガントなものではなく、どんなものでも動作させる必要があります。
HTTPartyのニルバナへの別のパスは、sub-class the parserです。 XMLの流れをパーサに取り込んでそこにマッサージすることができるはずです。ドキュメントから:
# Intercept the parsing for all formats
class SimpleParser < HTTParty::Parser
def parse
perform_parsing
end
end
優秀な回答! –