Can anybody tell me how to parse this on rails.
<?xml version="1.0" encoding="utf-8"?>
<message>
<param>
<name>messageType</name>
<value>SMS</value>
</param>
<param>
<name>id</name>
<value>xxxxxxxxxxxxxx</value>
</param>
<param>
<name>source</name>
<value>xxxxxxxxxxx</value>
</param>
<param>
<name>target</name>
<value>xxxxxxxxxxxxx</value>
</param>
<param>
<name>msg</name>
<value>xxxxxxxxxxxxx</value>
</param>
<param>
<name>udh</name>
<value></value>
</param>
</message>
I have no control on this xml, but I hope I can make the parameter looks like this before saving to my database
message"=>{"msg"=>"sampler", "id"=>"1", "target"=>"23123", "source"=>"312321312"}
here is the parameter I received when it access my method
message"=>{"param"=>[{"name"=>"id", "value"=>"2373084120100804002252"}, {"name"=>"messageType", "value"=>"SMS"}, {"name"=>"target", "value"=>"23730841"}, {"name"=>"source", "value"=>"09156490046"}, {"name"=>"msg", "value"=>"Hello world via iPhone"}, {"name"=>"udh", "value"=>nil}]}
There are a lot of Ruby XML parsing libraries. However, if your XML is small, you can use the ActiveSupport Hash extension .from_xml
:
Hash.from_xml(x)["message"]["param"].inject({}) do |result, elem|
result[elem["name"]] = elem["value"]
result
end
# => {"msg"=>"xxxxxxxxxxxxx", "messageType"=>"SMS", "udh"=>nil, "id"=>"xxxxxxxxxxxxxx", "target"=>"xxxxxxxxxxxxx", "source"=>"xxxxxxxxxxx"}
You should use Nokogiri for parsing xml. Its pretty fast.
Also, try checking out REXML for more complex problems.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With