Best way to parse XML data

Hey,

I am hooking up with the USPS rate calculator so I can calculate
shipping costs online. Unfortunately, USPS uses neither XML-RPC or
SOAP. I send the data via a GET request (a long URL) and I get data
back via xml. Questions:

  1. Is there a library or something within the rails platform that
    allows me to send a get request?
  2. Is there a library that allows me to parse the resulting XML data?

I am hooking up with the USPS rate calculator so I can calculate
shipping costs online. Unfortunately, USPS uses neither XML-RPC or
SOAP. I send the data via a GET request (a long URL) and I get data
back via xml. Questions:

  1. Is there a library or something within the rails platform that
    allows me to send a get request?
  2. Is there a library that allows me to parse the resulting XML data?

Never used it, but rexml maybe…

http://www.germane-software.com/software/rexml_doc/
http://www.germane-software.com/software/rexml/docs/tutorial.html

On 10/4/06, Stever [email protected] wrote:

Hey,

I am hooking up with the USPS rate calculator so I can calculate
shipping costs online. Unfortunately, USPS uses neither XML-RPC or
SOAP. I send the data via a GET request (a long URL) and I get data
back via xml. Questions:

  1. Is there a library or something within the rails platform that
    allows me to send a get request?
  2. Is there a library that allows me to parse the resulting XML data?

A POST works just fine with the USPS webtools api. It’s just not
evident from the documentation. Just post the data like you would for
a regular form post using application/x-www-form-urlencoded as the
content type.

Chris

If this is the case, do I use the “web services” functionality in
rails? I can’t seem to find any documentation either on the USPS
website or the internet for that matter. usps doesn’t even say if
they’re using XML-RPC or SOAP (I think it’s neither).

Can you at least point me in the right direction?

On 10/4/06, Stever [email protected] wrote:

If this is the case, do I use the “web services” functionality in
rails? I can’t seem to find any documentation either on the USPS
website or the internet for that matter. usps doesn’t even say if
they’re using XML-RPC or SOAP (I think it’s neither).

Use something like net/https to do the POST. The only strange thing
is that while the content type is application/x-www-form-urlencoded,
you don’t want to actually urlencode any of the data.

Here is a page that shows how it’s done in perl.

http://www.icdevgroup.org/docs/tags/usps-query.html

Also, is there someplace else I can post this code? There are a few
sites that seem to be sites to store “code snippets”. I forgot their
names though. What are the more popular ones?

Guys,

I figured out a way to write a script to get the info I needed from
USPS web tools. I used rexml and net/http plugins. I thought I would
contribute code to this group because there doesn’t seem to be much
support on the usps site for ruby. I searched online and couldn’t find
any scripts either. Anyway, here you go:
(PS, please don’t make fun of this code, I am new to ruby. However,
this code seems to work for me).
#! /usr/bin/ruby

************************************************************

The purpose of this script is to find out how much it costs

to send a package through USPS through a pre-defined

criteria

************************************************************

*** Define variables here ***

userid = “577MODEL4495”
service = “PRIORITY”
zip_origination = “10022”
zip_destination = “20008”
pounds = “10”
ounces = “5”
container = “Flat Rate Box”
box_size = “REGULAR”

Administrative

require ‘uri’
require ‘net/http’
require “rexml/document”
include REXML

Prepares the xml request for sending

xml_request = <<END


#{service}
#{zip_origination}
#{zip_destination}
#{pounds}
#{ounces}
#{container}
#{box_size}


END
xml_request = xml_request.gsub(/[\t\r\n]/,‘’)

Sends the xml request to USPS

host = ‘testing.shippingapis.com
path = “/ShippingAPITest.dll?API=RateV2&XML=” +
“#{URI.encode(xml_request)}”
xml_response = Net::HTTP.get host, path

Parses the returned xml response

parsed = Document.new xml_response
puts parsed.elements[‘//RateV2Response/Package/Postage/Rate’].text