Search code examples
xmlhttpruby-on-rails-2curb

Collect xml response by third party web service


I have used this command to send xml files to a web service named SRA-ENA.

 submission_field = Curl::PostField.content(File.read("xml/#{@experiment.alias}.submission.xml"), 'SUBMISSION')
      study_field = Curl::PostField.content(File.read("xml/#{@experiment.alias}.study.xml"), 'STUDY')
      sample_field = Curl::PostField.content(File.read("xml/#{@experiment.alias}.sample.xml"), 'SAMPLE')
      run_field = Curl::PostField.content(File.read("xml/#{@experiment.alias}.run.xml"), 'RUN')
      experiment_field = Curl::PostField.content(File.read("xml/#{@experiment.alias}.experiment.xml"), 'EXPERIMENT')
      # Send these requests to the test-SRA website
      request_test = Curl::Easy.http_post("https://www-test.ebi.ac.uk/ena/submit/drop-box/submit/?auth=ERA%20era-drop-81%20dxjf2dntWDr4CHg28qERORnv0RQ%3D", submission_field, study_field, sample_field, run_field, experiment_field )

In response to this, I receive a receipt from the web server in xml format,

Please could some one guide me how to save this xml in a variable so that I can use nokogiri to further parse the xml file.


Solution

  • Here is a standalone example, using Rails 2.3.14, that shows how to use nokogiri to parse XML results.

    require 'nokogiri'
    require 'curb' 
    
    # I have included this part so that this serves as a standalone example 
    
    ce = Curl::Easy.new("http://www.myexperiment.org/announcements.xml") 
    ce.perform 
    
    # This is the part that deals with parsing the XML result using nokogiri
    
    doc = Nokogiri::XML::Document.parse(ce.body_str)
    
    doc.xpath("/announcements/announcement").each do |announcement|
      puts announcement.content
    end