Wie wandle ich XML-Daten in einer hash in Rails?

Wie konvertiere ich eine XML-Körper zu einem hash in Ruby?

Ich habe eine XML-Stelle, die möchte ich analysieren, in eine hash -

<soap:Body>
    <TimesInMyDAY>
        <TIME_DATA>
            <StartTime>2010-11-10T09:00:00</StartTime>
            <EndTime>2010-11-10T09:20:00</EndTime>
        </TIME_DATA>
        <TIME_DATA>
            <StartTime>2010-11-10T09:20:00</StartTime>
            <EndTime>2010-11-10T09:40:00</EndTime>
        </TIME_DATA>
        <TIME_DATA>
            <StartTime>2010-11-10T09:40:00</StartTime>
            <EndTime>2010-11-10T10:00:00</EndTime>
        </TIME_DATA>
        <TIME_DATA>
            <StartTime>2010-11-10T10:00:00</StartTime>
            <EndTime>2010-11-10T10:20:00</EndTime>
        </TIME_DATA>
        <TIME_DATA>
            <StartTime>2010-11-10T10:40:00</StartTime>
            <EndTime>2010-11-10T11:00:00</EndTime>
        </TIME_DATA>
    </TimesInMyDAY>
</soap:Body>

Möchte ich es konvertieren in einen hash wie dieser:

{ :times_in_my_day => { 
    :time_data = > [
        {:start_time=>"2010-11-10T09:00:00", :end_time => "2010-11-10T09:20:00" },
        {:start_time=>"2010-11-10T09:20:00", :end_time => "2010-11-10T09:40:00" },
        {:start_time=>"2010-11-10T09:40:00", :end_time => "2010-11-10T10:00:00" },
        {:start_time=>"2010-11-10T10:00:00", :end_time => "2010-11-10T10:20:00" },
        {:start_time=>"2010-11-10T10:40:00", :end_time => "2010-11-10T11:00:00" }
        ]
    } 
}

Idealerweise werden die tags umgewandelt werden snake_case Symbole und zum Schlüssel in dem hash.

Auch, die datetimes vermissen Ihre Zeitzone offsets. Sie sind in der lokalen Zeitzone (nicht UTC). So würde ich mag, um zu analysieren es, um zu zeigen, das lokale offset und dann konvertieren Sie die xml datetime String in ein Schienen-DateTime-Objekte. Das resultierende array wäre so etwas wie:

{ :times_in_my_day => { 
    :time_data = > [
        {:start_time=>Wed Nov 10 09:00:00 -0800 2010, :end_time => Wed Nov 10 9:20:00 -0800 2010 },
        {:start_time=>Wed Nov 10 09:20:00 -0800 2010, :end_time => Wed Nov 10 9:40:00 -0800 2010 },
        {:start_time=>Wed Nov 10 09:40:00 -0800 2010, :end_time => Wed Nov 10 10:00:00 -0800 2010 },
        {:start_time=>Wed Nov 10 10:00:00 -0800 2010, :end_time => Wed Nov 10 10:20:00 -0800 2010 },
        {:start_time=>Wed Nov 10 10:40:00 -0800 2010, :end_time => Wed Nov 10 11:00:00 -0800 2010 }
        ]
    } 
}

War ich in der Lage, konvertieren Sie eine einzelne datetime mit der parse und in_time_zone Methoden auf diese Weise:

Time.parse(xml_datetime).in_time_zone(current_user.time_zone)

Aber ich bin mir nicht ganz sicher der beste Weg, um eine Analyse der Zeiten, während die Umwandlung der XML-Datei in ein hash.

Ich würde schätzen jede Beratung. Danke!

Bearbeiten

Den code für die Konvertierung des datetime-string in eine Rails-DateTime-Objekt falsch ist. Wird zum Parsen der xml-datetime-Zeichenfolge, um die system-Zeitzone-offset und dann zu konvertieren, dass die Zeit für die user-Zeitzone. Der richtige code lautet:

Time.zone.parse(xml_datetime)

Wenn der Benutzer hat eine andere Zeitzone, andere als im system, dadurch wird die Zeitzone des Benutzers offset zur ursprünglichen datetime string. Gibt es einen Railscast zum aktivieren von Benutzer-Zeitzone-Einstellungen hier: http://railscasts.com/episodes/106-time-zones-in-rails-2-1.

  • Time.zone.parse(xml_datetime) <- Super! danke.
InformationsquelleAutor Chanpory | 2010-11-11
Schreibe einen Kommentar