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

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?

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

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
<RateV2Request USERID="#{userid}">
  <Package ID="0">
    <Service>#{service}</Service>
    <ZipOrigination>#{zip_origination}</ZipOrigination>
    <ZipDestination>#{zip_destination}</ZipDestination>
    <Pounds>#{pounds}</Pounds>
    <Ounces>#{ounces}</Ounces>
    <Container>#{container}</Container>
    <Size>#{box_size}</Size>
  </Package>
</RateV2Request>
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

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?