Ecco un esempio di qualche stranezza:Come posso ottenere Nokogiri per analizzare e restituire un documento 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"
L'esecuzione di questo ritorna:
without read: Nokogiri::XML::Document
with read: Nokogiri::HTML::Document
Senza la read
rendimenti XML, e con esso è l'HTML? La pagina Web è definito come "XHTML di transizione", quindi in un primo momento ho pensato Nokogiri deve essere stato la lettura di "Content-Type" di OpenURI dal flusso, ma che restituisce 'text/html'
:
(rdb:1) doc = open(('http://weblog.rubyonrails.org/'))
(rdb:1) doc.content_type
"text/html"
che è ciò che il server sta tornando . Quindi, ora sto cercando di capire perché Nokogiri sta restituendo due valori diversi. Non sembra che analizzi il testo e utilizzi l'euristica per determinare se il contenuto è HTML o XML.
La stessa cosa sta accadendo con il feed ATOM puntato da quella pagina:
(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
ho bisogno di essere in grado di analizzare una pagina senza sapere di cosa si tratta in anticipo, HTML o un feed (RSS o ATOM) e determinare in modo affidabile quale sia. Ho chiesto a Nokogiri di analizzare il corpo di un file di feed HTML o XML, ma sto vedendo quei risultati incoerenti.
ho pensato che avrei potuto scrivere alcuni test per determinare il tipo, ma poi mi sono imbattuto in XPaths non trovare elementi, ma le ricerche normali di lavoro:
(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
ho pensato XPaths avrebbe funzionato con XML, ma i risultati non sembra affidabile.
Questi test sono stati tutti eseguiti sulla mia scatola Ubuntu, ma ho visto lo stesso comportamento sul mio Macbook Pro. Mi piacerebbe scoprire che sto facendo qualcosa di sbagliato, ma non ho visto un esempio per l'analisi e la ricerca che mi ha dato risultati coerenti. Qualcuno può mostrarmi l'errore dei miei modi?
Ironicamente questo in realtà NON è una domanda ... –