당신이 HTTPParty를 사용하고 있고 들어오는 XML을 파싱하기 전에 손을 잡기 전에 get과 구문 분석으로 프로세스를 분할해야합니다. 두.
OpenURI와 Nokogiri를 그 이유만으로 사용하지만이 두 가지 또는 이와 동등한 것을 사용하더라도 구문 분석을하기 전에 XML을 사전 처리 할 수 있습니다. '&
'은 (는) 불법 문자입니다. 그것은 인코딩되거나 CDATA 블록에 있어야하지만, 불행히도 인터넷의 야생에서는 형식이 잘못된 XML 피드와 파일이 많이 있습니다.
나는이 일을 위해 노코 기리 (Nokogiri)에 대해 좋아하는 것은 그것이 적어도 가능한 한 칙칙폭폭 새기다. 당신은 문서를 구문 분석 후 오류를 가지고 있는지 볼 수, 당신은 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
우수 답변! –