Вот пример некоторых странности:Как я могу заставить 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
Без XML read
возвращается, и это HTML? Веб-страница определяется как «XHTML переходный», поэтому сначала я подумал Nokogiri должен быть чтение OpenURI в «Content-Type» из потока, но возвращает 'text/html'
:
(rdb:1) doc = open(('http://weblog.rubyonrails.org/'))
(rdb:1) doc.content_type
"text/html"
который является то, что сервер возвращает , Итак, теперь я пытаюсь понять, почему Нокигири возвращает два разных значения. По-видимому, он не анализирует текст и не использует эвристику, чтобы определить, является ли контент 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 не находя элементы, но регулярные поиски работают:
(rdb:1) doc = Nokogiri.parse(open('http://feeds.feedburner.com/RidingRails'))
(rdb:1) doc.class
Nokogiri::XML::Document
(rdb:1) doc.xpath('/feed/entry').length
0
(rdb:1) doc.search('feed entry').length
15
Я понял, XPaths будет работать с XML, но результаты не также заслуживает доверия.
Эти тесты были выполнены в моем поле Ubuntu, но я видел такое же поведение на своем Macbook Pro. Мне бы хотелось узнать, что я делаю что-то неправильно, но я не видел примера для разбора и поиска, что дало мне последовательные результаты. Может ли кто-нибудь показать мне ошибку моих путей?
Как это ни парадоксально, это не вопрос ... – 2010-12-10 06:49:50