2009-07-08 8 views
1

Je veux obtenir un fichier XML, que je peux demander par une requête http dans un objet. Je cherche quelque chose de similaire à ce (dans un contrôleur):Comment stocker un fichier (xml) demandé par http dans un objet?

@ticket = request "http://example.com?ticketid=1234" 

http://tickets.com?ticketid=1234 retourne un fichier XML (tickets.com est pas le site de l'application est en cours d'exécution sur). Je veux ensuite analyser @ticket, pour extraire les données du XML.

Merci beaucoup pour votre aide!

+0

Souhaitez-vous que @ticket contienne le XML ou soit réellement une instance d'une classe qui reflète les données représentées par le XML? –

+0

Je n'y avais pas encore pensé. Oui, je vais vouloir sortir les données du xml après cela, pour continuer à travailler. Je n'ai pas regardé comment je dois gérer cela après (je suis assez nouveau en programmation, donc je prends les choses pas à pas). thx –

Répondre

2

Si vous voulez juste télécharger le fichier XML dans une chaîne, ce qui suit ferait:

require 'open-uri' 

xml = URI.parse("http://example.com?ticketid=1234").read 

Si vous voulez analyser ce XML et d'en extraire les données, vous devez regarder une sorte d'analyseur , par exemple LibXml ou Nokogiri.

Si vous essayez d'accéder aux données d'une autre application Rails, peut-être ActiveResource est la voie à suivre. Voici un joli introduction.

1

Découvrez HTTParty pour une consommation super facile des services Web. En fait, vous feriez quelque chose comme ceci:

class Ticket 
    include HTTParty 
    format :xml 
end 

@ticket = Ticket.get('http://url/to/ticket') 

Ensuite, vous pouvez accéder à des éléments dans un hachage:

@ticket['title'] # => the <title> element 
1

Une fois que vous avez les données XML, vous pouvez utiliser l'extension Hash Active Support pour le convertir dans un Hash

xml = URI.parse("http://example.com?ticketid=1234").read 
data = Hash.from_xml(xml) 

de cette façon, vous n'avez pas besoin libs supplémentaires et de déterminer pour traverser le xml. YMMV

Remarque: Vous ne savez pas comment cette méthode gère les attributs d'élément.

+0

Merci pour le conseil de suivi! –

0

Vous pouvez utiliser Hpricot XML method comme ceci:

require 'open-uri' 
require 'hpricot' 

@ticket = Hpricot.XML open "http://example.com?ticketid=1234" 

Ensuite, vous pouvez facilement analyser @ticket avec des méthodes dynamiques hpricot. Voir quelques exemples dans la page Hpricot.

Questions connexes