He aquí una muestra de algunas rarezas:¿Cómo puedo obtener Nokogiri para analizar y devolver 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"
La ejecución de este regresa:
without read: Nokogiri::XML::Document
with read: Nokogiri::HTML::Document
Sin el XML read
rendimientos, y con ella es HTML? La página web se define como "XHTML de transición", por lo que en un principio pensé Nokogiri debe haber sido la lectura de "Content-Type" de OpenURI de la corriente, pero que devuelve 'text/html'
:
(rdb:1) doc = open(('http://weblog.rubyonrails.org/'))
(rdb:1) doc.content_type
"text/html"
que es lo que el servidor está volviendo . Entonces, ahora estoy tratando de descubrir por qué Nokogiri está devolviendo dos valores diferentes. No parece analizar el texto y usar la heurística para determinar si el contenido es HTML o XML.
Lo mismo está sucediendo con el canal de información ATOM apuntado por esa página:
(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
tengo que ser capaz de analizar una página sin saber lo que es por adelantado, ya sea HTML o una alimentación (RSS o ATOM) y determinar de manera confiable cuál es. Le pedí a Nokogiri que analizara el cuerpo de un archivo de fuente HTML o XML, pero veo esos resultados inconsistentes.
pensé que podría escribir algunas pruebas para determinar el tipo, pero luego me encontré con XPaths no encontrar elementos, pero las búsquedas regulares de trabajo:
(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
que pensé XPaths sería trabajar con XML, pero los resultados no lo hacen parece confiable tampoco.
Estas pruebas se realizaron todas en mi caja de Ubuntu, pero he visto el mismo comportamiento en mi Macbook Pro. Me encantaría descubrir que estoy haciendo algo mal, pero no he visto un ejemplo de análisis y búsqueda que me haya dado resultados consistentes. ¿Alguien puede mostrarme el error de mis caminos?
Irónicamente esto en realidad NO ES una pregunta ... –