Nokogiri가 XML 문서를 구문 분석하고 반환하도록하려면 어떻게해야합니까?
#!/usr/bin/ruby
require 'rubygems'
require 'open-uri'
require 'nokogiri'
print "without read: ", Nokogiri(open('http://weblog.rubyonrails.org/')).class, "\n"
print "with read: ", Nokogiri(open('http://weblog.rubyonrails.org/').read).class, "\n"
이렇게하면 다음과 같이 반환됩니다.
without read: Nokogiri::XML::Document
with read: Nokogiri::HTML::Document
read
이 없으면 XML이 반환되고 HTML과 함께 사용됩니까? 웹 페이지는 "XHTML transitional"로 정의되었으므로 처음에는 Nokogiri가 스트림에서 OpenURI의 "content-type"을 읽었 음에 틀림 없다고 생각했지만 'text/html'
을 반환합니다.
(rdb:1) doc = open(('http://weblog.rubyonrails.org/'))
(rdb:1) doc.content_type
"text/html"
이는 서버가 반환하는 것입니다. . 이제 Nokogiri가 왜 두 가지 다른 가치를 반환하는지 알아 내려고 노력하고 있습니다. 텍스트를 구문 분석하고 발견 적 방법을 사용하여 내용이 HTML인지 XML인지를 판단하는 것처럼 보이지 않습니다.
그 페이지에서 가리키는 ATOM 피드에서도 똑같은 일이 일어나고 있습니다.
(rdb:1) doc = Nokogiri.parse(open('http://feeds.feedburner.com/RidingRails'))
(rdb:1) doc.class
Nokogiri::XML::Document
(rdb:1) doc = Nokogiri.parse(open('http://feeds.feedburner.com/RidingRails').read)
(rdb:1) doc.class
Nokogiri::HTML::Document
HTML 또는 피드 (RSS)가 무엇인지 모른 채 페이지를 파싱 할 수 있어야합니다 또는 ATOM)을 선택하고 그것이 무엇인지를 신뢰성있게 결정하십시오. Nokogiri에게 HTML 또는 XML 피드 파일의 본문을 구문 분석하도록 요청했지만 이러한 일관성없는 결과가 표시됩니다.
형식을 결정하기 위해 몇 가지 테스트를 작성할 수 있다고 생각했지만 요소를 찾지 못하는 xpaths를 만났지만 정기적으로 검색 할 수 있다고 생각했습니다. xpaths는 XML과 작동하지만 결과는 같지 않은 것으로 나타났습니다. 믿을 만하다.이 테스트는 모두 내 Ubuntu 상자에서 수행되었지만 Macbook Pro에서 동일한 동작을 보았습니다. 내가 잘못하고있는 것을 알고 싶지만 구문 분석과 검색을 통해 일관된 결과를 얻는 예제를 보지 못했습니다. 누구든지 저에게 제 실수의 오류를 보여줄 수 있습니까?
아이러니하게도 실제로 이것은 질문이 아닙니다 ... –