J'essaie d'analyser les informations d'un flux RSS qui possède cette structure de balises:
<dc:subject>foo bar</dc:subject>
3 Réponses :
Je pense item ['dc: sujet'] code> pourrait fonctionner. P>
Ouais, l'analyseur RSS ignore complètement ces étiquettes qu'il ne reconnaît pas, de sorte qu'ils ne le font même pas dans l'objet objet code>. Dommage. Comment puis-je saisir les éléments
<élément> code> avec
libxml code>? L'arbre XML ressemble à ceci:
doc.find ("// rdf: rdf / élément"). Chaque code> ne trouve rien.
Je recommande de regarder dans Nokogiri au lieu de libxml. Nokogiri est très robuste et bien soutenu.
Tags avec ':' en eux sont vraiment des étiquettes XML avec un espace de noms. Je n'ai jamais eu de bons résultats en utilisant le module RSS car les formats d'alimentation ne répondent souvent pas aux spécifications, ce qui entraîne l'abandon du module. Je recommande vivement d'utiliser Nokogiri pour analyser le flux, que ce soit RDF, RSS ou Atom.
Nokogiri a la possibilité d'utiliser des accesseurs XPath ou des accesseurs CSS, et des espaces de noms de support. Les deux dernières lignes seraient équivalentes: p> Lorsque vous traitez des espaces de noms, vous devez ajouter la déclaration à l'accesseur XPath: P> doc.at('//dc:subject', 'dc' => 'link to dc declaration')
Élargir sur cette idée, l'arrogance de la GEM est construite sur Nokogiri et facilite l'analyse d'une alimentation aussi simple que de passer à l'URL d'alimentation et de manipuler la matrice de postes retournés. Rubygems: rubygems.org/gems/arrogance
Je vais y jeter un coup d'oeil quelque temps. Quand j'ai écrit mon agrégateur, il n'y avait rien que j'ai trouvé que cela gênait la large gamme de nourris hachés totalement foirés que j'ai rencontrés.
Yup, arrogance découvre les balises pour vous et les définit comme [: Titre] [: Auteur] [: Link] [: Description] [: Date] Non quoi.
Le RSS module semble Pour avoir la possibilité de faire ces attributs d'espace de noms XML, c'est-à-dire
nourrir.items.each fo | article |
met "date: # {item.dc_date}"
finir
code> p>