Analyse XML avec Nokogiri
Avoir quelques problèmes à obtenir la bonne configuration pour Nokogiri et leur documentation est un peu rude pour commencer avec.
Je suis en train d'analyser le fichier XML: http://www.kongregate.com/games_for_your_site.xml
Qui renvoie à plusieurs jeux à l'intérieur de la gameset, et pour chaque jeu, il a un titre, la description, etc....
<gameset>
<game>
<id>160342</id>
<title>Tricky Rick</title>
<thumbnail>
http://cdn3.kongregate.com/game_icons/0042/7180/KONG_icon250x200_site.png?21656-op
</thumbnail>
<launch_date>2012-12-12</launch_date>
<category>Puzzle</category>
<flash_file>
http://external.kongregate-games.com/gamez/0016/0342/live/embeddable_160342.swf
</flash_file>
<width>640</width>
<height>480</height>
<url>
http://www.kongregate.com/games/tAMAS_Games/tricky-rick
</url>
<description>
Help Rick to collect all the stolen fuel to refuel his spaceship and fly away from the planet. Use hammer, bombs, jetpack and other useful stuff to solve puzzles!
</description>
<instructions>
WASD \ Arrow Keys – move; S \ Down Arrow – take\release an object; CNTRL – interaction with objects: throw, hammer strike, invisibility mode; SPACE – interaction with elevators and fuel stations; Esc \ P – pause;
</instructions>
<developer_name>tAMAS_Games</developer_name>
<gameplays>24999</gameplays>
<rating>3.43</rating>
</game>
<game>
<id>160758</id>
<title>Flying Cookie Quest</title>
<thumbnail>
http://cdn2.kongregate.com/game_icons/0042/8428/icon_cookiequest_kong_250x200_site.png?16578-op
</thumbnail>
<launch_date>2012-12-07</launch_date>
<category>Action</category>
<flash_file>
http://external.kongregate-games.com/gamez/0016/0758/live/embeddable_160758.swf
</flash_file>
<width>640</width>
<height>480</height>
<url>
http://www.kongregate.com/games/LongAnimals/flying-cookie-quest
</url>
<description>
Launch Rocket Panda into the land of Cookies. With the help of low-flying sharks, hang-gliding sheep and Rocket Badger, can you defeat the all powerful Biscuit Head? Defeat All enemies of cookies in this launcher game.
</description>
<instructions>Use the mouse button!</instructions>
<developer_name>LongAnimals</developer_name>
<gameplays>168672</gameplays>
<rating>3.67</rating>
</game>
De la documentation, je suis en utilisant quelque chose comme:
require 'nokogiri'
require 'open-uri'
url = "http://www.kongregate.com/games_for_your_site.xml"
xml = Nokogiri::XML(open(url))
xml.xpath("//game").each do |node|
puts node.xpath("//id")
puts node.xpath("//title")
puts node.xpath("//thumbnail")
puts node.xpath("//category")
puts node.xpath("//flash_file")
puts node.xpath("//width")
puts node.xpath("//height")
puts node.xpath("//description")
puts node.xpath("//instructions")
end
Mais, elle retourne sans fin de données, et non pas dans un ensemble. Toute aide serait utile.
De quelle manière avez-vous trouver le Nokogiri documents "bruts"? Sont les tutoriels nokogiri.org en manque de quelque chose? Est le rdoc documentation manque quelque chose qui vous aurait aidé ici?
Il a vraiment à faire avec ce que l'homme de fer-blanc des etats-dessous
Il a vraiment à faire avec ce que l'homme de fer-blanc des etats-dessous
OriginalL'auteur thebusiness11 | 2013-01-01
Vous devez vous connecter pour publier un commentaire.
Voici comment je voudrais réécrire votre code:
Le problème dans ton code, c'est que tous les sous-balises sont préfixés avec
//
qui, dans XPath-ese, signifie "commencer à la racine de nœud et de la recherche vers le bas pour toutes les balises contenant que du texte." Donc, au lieu de rechercher uniquement à l'intérieur de chaque//game
nœuds, elle cherchait l'ensemble du document pour chacune des balises pour chaque//game
nœud.Je recommande l'utilisation de CSS accesseurs sur XPath, car ils sont plus simples (en général) et plus facile à lire comme un résultat. Ainsi, au lieu de
xpath('//game')
- je utilisersearch('game')
. (search
va prendre un CSS ou XPath accesseur, commeat
.)Si vous souhaitez que le texte contenu dans les balises, changement
puts game.at(n)
à:Pour rendre la sortie plus utile je le ferais:
Qui se traduit par:
Le XPath
//
fous tout le monde lorsqu'ils commencent à travailler avec elle.Ce qui est excellent, mais le but final est de les stocker dans la base de données, une ligne pour chaque jeu à l'intérieur du jeu. Cela peut-il arriver de ce tableau?
Facilement. Nous le faisons tout le temps, mais comment est-à gauche pour vous trouver. Un indice, c'est que chaque intégré de hachage est une ligne distincte. Si les touches ne correspondent pas directement à des noms de champ, vous pouvez créer un tableau avec les noms de champ et les
zip
qu'avec levalues
de chaque hachage, puis jeté dans une table de Hachage en utilisant quelque chose commeHash[['foo','bar'].zip(hash.values)]
. Aussi, certains Sgbd pouvez directement importer des données XML, donc, l'analyse, il peut ne pas être nécessaire. Importer dans une table temporaire, déposer les champs que vous n'avez pas besoin, leur copie le tableau résultant de votre fabrication de la table.OriginalL'auteur the Tin Man
Vous pouvez essayer quelque chose comme cela. Je suggère la création d'un tableau pour les éléments à l'intérieur de jeu que vous voulez et ensuite itérer sur eux. Je suis sûr qu'il ya un moyen d'obtenir tous les éléments à l'intérieur de ce qui est indiqué dans Nokogiri mais cela fonctionne:
each
OriginalL'auteur sq1020