Voici un échantillon de quelques bizarreries:Comment puis-je faire en sorte que Nokogiri analyse et renvoie un document 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'exécution de ce retour:
without read: Nokogiri::XML::Document
with read: Nokogiri::HTML::Document
Sans XML read
de retour, et il est HTML? La page Web est définie comme « XHTML transition », donc au début je pensais Nokogiri doit avoir été lu « type de contenu » de openURI du flux, mais qui retourne 'text/html'
:
(rdb:1) doc = open(('http://weblog.rubyonrails.org/'))
(rdb:1) doc.content_type
"text/html"
qui est ce que le serveur retourne . Donc, maintenant j'essaie de comprendre pourquoi Nokogiri retourne deux valeurs différentes. Il ne semble pas analyser le texte et utiliser des heuristiques pour déterminer si le contenu est HTML ou XML.
La même chose se produit avec l'ATOM pointée par cette page:
(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
je dois être capable d'analyser une page sans savoir ce qu'il est en avance, soit en HTML ou un flux (RSS ou ATOM) et détermine de manière fiable de quoi il s'agit. J'ai demandé à Nokogiri d'analyser le corps d'un fichier de flux HTML ou XML, mais je vois ces résultats incohérents.
Je pensais que je pourrais écrire des tests pour déterminer le type mais je suis tombé sur XPath ne pas trouver des éléments, mais des recherches régulières de travail:
(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
je me suis dit XPath travaillerait avec XML, mais les résultats ne avoir l'air digne de confiance non plus.
Ces tests ont tous été effectués sur ma boîte Ubuntu, mais j'ai vu le même comportement sur mon Macbook Pro. J'aimerais découvrir que je fais quelque chose de mal, mais je n'ai pas vu un exemple pour l'analyse et la recherche qui m'a donné des résultats cohérents. Quelqu'un peut-il me montrer l'erreur de mes manières?
Ironiquement, ce n'est PAS une question ... –