27 Stimmen

Rails XML-Parsing

Kann mir jemand sagen, wie man das auf Rails analysiert?

<?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>

Ich habe keine Kontrolle über diese xml, aber ich hoffe, dass ich den Parameter so aussehen lassen kann, bevor ich ihn in meiner Datenbank speichere

message"=>{"msg"=>"sampler", "id"=>"1", "target"=>"23123", "source"=>"312321312"}

Hier ist der Parameter, den ich beim Zugriff auf meine Methode erhalten habe

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}]}

67voto

Vlad Zloteanu Punkte 8404

Es gibt eine Vielzahl von Ruby XML-Parsing-Bibliotheken. Wenn Ihr XML jedoch klein ist, können Sie die ActiveSupport Hash-Erweiterung verwenden .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"}

17voto

Shripad Krishna Punkte 10293

Sie sollten Folgendes verwenden Nokogiri für das Parsen von Xml. Es ist ziemlich schnell.

2voto

Kevin Sylvestre Punkte 35912

Probieren Sie auch Folgendes aus REXML für komplexere Probleme.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X