ELEC
ELEC

Reputation: 265

Parsing XML files with Python

I'm trying to solve a problem where I have XML data that has 2 time series (sometimes more) of measurements in the same file. In this case temperature and wind speed measurements from the same time interval. See the XML file below:

   <?xml version="1.0" encoding="UTF-8"?>
<wfs:FeatureCollection
    timeStamp="2015-04-16T09:40:29Z"
    numberMatched="2"
    numberReturned="2"
           xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:om="http://www.opengis.net/om/2.0"
        xmlns:ompr="http://inspire.ec.europa.eu/schemas/ompr/2.0rc3"
        xmlns:omso="http://inspire.ec.europa.eu/schemas/omso/2.0rc3"
        xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:gmd="http://www.isotc211.org/2005/gmd"
        xmlns:gco="http://www.isotc211.org/2005/gco" xmlns:swe="http://www.opengis.net/swe/2.0"
        xmlns:gmlcov="http://www.opengis.net/gmlcov/1.0"
        xmlns:sam="http://www.opengis.net/sampling/2.0"
        xmlns:sams="http://www.opengis.net/samplingSpatial/2.0"
        xmlns:wml2="http://www.opengis.net/waterml/2.0"
    xmlns:target="http://xml.fmi.fi/namespace/om/atmosphericfeatures/0.95"
        xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd
        http://www.opengis.net/gmlcov/1.0 http://schemas.opengis.net/gmlcov/1.0/gmlcovAll.xsd
        http://www.opengis.net/sampling/2.0 http://schemas.opengis.net/sampling/2.0/samplingFeature.xsd
        http://www.opengis.net/samplingSpatial/2.0 http://schemas.opengis.net/samplingSpatial/2.0/spatialSamplingFeature.xsd
        http://www.opengis.net/swe/2.0 http://schemas.opengis.net/sweCommon/2.0/swe.xsd
        http://inspire.ec.europa.eu/schemas/ompr/2.0rc3 http://inspire.ec.europa.eu/draft-schemas/ompr/2.0rc3/Processes.xsd
        http://inspire.ec.europa.eu/schemas/omso/2.0rc3 http://inspire.ec.europa.eu/draft-schemas/omso/2.0rc3/SpecialisedObservations.xsd
        http://www.opengis.net/waterml/2.0 http://inspire.ec.europa.eu/draft-schemas/waterml/2.0rfc/waterml2.xsd
        http://xml.fmi.fi/namespace/om/atmosphericfeatures/0.95 http://xml.fmi.fi/schema/om/atmosphericfeatures/0.95/atmosphericfeatures.xsd">

        <wfs:member>
                <omso:PointTimeSeriesObservation gml:id="WFS-fip7WVVLMFTJudLNbf8qa6jEiVKJTowqYWbbpdOt.Lnl5dsPTTv3c3Trvlw9NGXk6ddNO3L2w7OuXhh08oWliy59O6pp25bX_0KFCMbHy51qRaFOO6dNGTVwzsu7JU07ctr_6FCiGdm26eenJzrMYsGLBg3Zmzfjw7MtambTfjSV3XpmcNbbh8RNPPph3Y8tK1dCA0tuHxF4b8ejnODHM3tuXpl30MPLDty9MvLnWt0y7eGXlh6deWVrbdPPnp3Z6mXx0rGnYZza3dds_NT6Yemnfu5zhNbj1w7NPTzJ3Zt9Y2_Nma3Pph6ad.6p54Za0N_DLuyYemFuc.m_llyceuXl5v6claYWbbpdOt.Lnl5dsPTTv3c3Trvlw9NGXk6ddNO3L2w7OuXhh08mh007ctPpl4T8hNDpp25bW_dlrGq1IYA-">

                    <om:phenomenonTime>
        <gml:TimePeriod  gml:id="time1-1-1">
          <gml:beginPosition>2015-01-01T00:00:00Z</gml:beginPosition>
          <gml:endPosition>2015-01-02T00:00:00Z</gml:endPosition>
        </gml:TimePeriod>
      </om:phenomenonTime>
      <om:resultTime>
        <gml:TimeInstant gml:id="time2-1-1">
          <gml:timePosition>2015-01-02T00:00:00Z</gml:timePosition>
        </gml:TimeInstant>
      </om:resultTime>      

        <om:procedure xlink:href="http://xml.fmi.fi/inspire/process/opendata"/>
                    <om:parameter>
                <om:NamedValue>
                    <om:name xlink:href="http://inspire.ec.europa.eu/codeList/ProcessParameterValue/value/groundObservation/observationIntent"/>
                    <om:value>
            atmosphere
                    </om:value>
                </om:NamedValue>
            </om:parameter>

                <om:observedProperty  xlink:href="http://data.fmi.fi/fmi-apikey/41156987-d187-45e2-a2d3-6113c39b15ab/meta?observableProperty=observation&amp;param=temperature&amp;language=eng"/>
                <om:featureOfInterest>
                    <sams:SF_SpatialSamplingFeature gml:id="fi-1-1-temperature">
          <sam:sampledFeature>
        <target:LocationCollection gml:id="sampled-target-1-1-temperature">
            <target:member>
            <target:Location gml:id="obsloc-fmisid-101007-pos-temperature">
                <gml:identifier codeSpace="http://xml.fmi.fi/namespace/stationcode/fmisid">101007</gml:identifier>
            <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/name">Helsinki Rautatientori</gml:name>
            <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/geoid">-16011680</gml:name>
            <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/wmo">2934</gml:name>
            <target:representativePoint xlink:href="#point-101007"/>                                    


            <target:region codeSpace="http://xml.fmi.fi/namespace/location/region">Helsinki</target:region>

            </target:Location></target:member>
        </target:LocationCollection>
       </sam:sampledFeature>
                        <sams:shape>

                <gml:Point gml:id="point-1-1-temperature" srsName="http://www.opengis.net/def/crs/EPSG/0/4258" srsDimension="2">
                                <gml:name>Helsinki Rautatientori</gml:name>
                                <gml:pos>60.17169 24.94460 </gml:pos>
                            </gml:Point>

                        </sams:shape>
                    </sams:SF_SpatialSamplingFeature>
                </om:featureOfInterest>
          <om:result>
                    <wml2:MeasurementTimeseries gml:id="obs-obs-1-1-temperature">                         
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T00:00:00Z</wml2:time>
                      <wml2:value>4.6</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T01:00:00Z</wml2:time>
                      <wml2:value>4.5</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T02:00:00Z</wml2:time>
                      <wml2:value>4.2</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T03:00:00Z</wml2:time>
                      <wml2:value>4.0</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T04:00:00Z</wml2:time>
                      <wml2:value>4.1</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T05:00:00Z</wml2:time>
                      <wml2:value>4.1</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T06:00:00Z</wml2:time>
                      <wml2:value>4.5</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T07:00:00Z</wml2:time>
                      <wml2:value>4.1</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T08:00:00Z</wml2:time>
                      <wml2:value>3.3</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T09:00:00Z</wml2:time>
                      <wml2:value>2.9</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T10:00:00Z</wml2:time>
                      <wml2:value>2.5</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T11:00:00Z</wml2:time>
                      <wml2:value>2.4</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T12:00:00Z</wml2:time>
                      <wml2:value>2.5</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T13:00:00Z</wml2:time>
                      <wml2:value>2.7</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T14:00:00Z</wml2:time>
                      <wml2:value>2.8</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T15:00:00Z</wml2:time>
                      <wml2:value>3.1</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T16:00:00Z</wml2:time>
                      <wml2:value>3.3</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T17:00:00Z</wml2:time>
                      <wml2:value>3.7</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T18:00:00Z</wml2:time>
                      <wml2:value>4.1</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T19:00:00Z</wml2:time>
                      <wml2:value>4.1</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T20:00:00Z</wml2:time>
                      <wml2:value>4.4</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T21:00:00Z</wml2:time>
                      <wml2:value>4.7</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T22:00:00Z</wml2:time>
                      <wml2:value>4.6</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T23:00:00Z</wml2:time>
                      <wml2:value>4.7</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-02T00:00:00Z</wml2:time>
                      <wml2:value>4.2</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                         
                    </wml2:MeasurementTimeseries>
                </om:result>

        </omso:PointTimeSeriesObservation>
    </wfs:member>
        <wfs:member>
                <omso:PointTimeSeriesObservation gml:id="WFS-6fPzOlwmFuqLQd1YDR_0qMRemw2JTowqYWbbpdOt.Lnl5dsPTTv3c3Trvlw9NGXk6ddNO3L2w7OuXhh08oWliy59O6pp25bX_0KFCMbHy51qRaFOO6dNGTVwzsu7JU07ctr_6FCiGdm26eenJzrMYsGLBg3Zmzfjw7MtambTfjSV3XpmcNbbh8RNPPph3Y8tK1dCA0tuHxF4b8ejnODHM3tuXpl30MPLDty9MvLnWt307snPhly5NvNrbdPPnp3Z6mXx0rGnYZza3dds_NT6Yemnfu5zhNbj1w7NPTzJ3Zt9Y2_Nma3Pph6ad.6p54Za0N_DLuyYemFuc.m_llyceuXl5v6claYWbbpdOt.Lnl5dsPTTv3c3Trvlw9NGXk6ddNO3L2w7OuXhh08mh007ctPpl4T8hNDpp25bW_dlrGq1IYA-">


      <om:phenomenonTime xlink:href="#time1-1-1"/>
      <om:resultTime xlink:href="#time2-1-1"/>      

        <om:procedure xlink:href="http://xml.fmi.fi/inspire/process/opendata"/>
                    <om:parameter>
                <om:NamedValue>
                    <om:name xlink:href="http://inspire.ec.europa.eu/codeList/ProcessParameterValue/value/groundObservation/observationIntent"/>
                    <om:value>
            atmosphere
                    </om:value>
                </om:NamedValue>
            </om:parameter>

                <om:observedProperty  xlink:href="http://data.fmi.fi/fmi-apikey/41156987-d187-45e2-a2d3-6113c39b15ab/meta?observableProperty=observation&amp;param=windspeedms&amp;language=eng"/>
                <om:featureOfInterest>
                    <sams:SF_SpatialSamplingFeature gml:id="fi-1-1-windspeedms">
          <sam:sampledFeature>
        <target:LocationCollection gml:id="sampled-target-1-1-windspeedms">
            <target:member>
            <target:Location gml:id="obsloc-fmisid-101007-pos-windspeedms">
                <gml:identifier codeSpace="http://xml.fmi.fi/namespace/stationcode/fmisid">101007</gml:identifier>
            <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/name">Helsinki Rautatientori</gml:name>
            <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/geoid">-16011680</gml:name>
            <gml:name codeSpace="http://xml.fmi.fi/namespace/locationcode/wmo">2934</gml:name>
            <target:representativePoint xlink:href="#point-101007"/>                                    


            <target:region codeSpace="http://xml.fmi.fi/namespace/location/region">Helsinki</target:region>

            </target:Location></target:member>
        </target:LocationCollection>
       </sam:sampledFeature>
                        <sams:shape>

                <gml:Point gml:id="point-1-1-windspeedms" srsName="http://www.opengis.net/def/crs/EPSG/0/4258" srsDimension="2">
                                <gml:name>Helsinki Rautatientori</gml:name>
                                <gml:pos>60.17169 24.94460 </gml:pos>
                            </gml:Point>

                        </sams:shape>
                    </sams:SF_SpatialSamplingFeature>
                </om:featureOfInterest>
          <om:result>
                    <wml2:MeasurementTimeseries gml:id="obs-obs-1-1-windspeedms">                         
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T00:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T01:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T02:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T03:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T04:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T05:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T06:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T07:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T08:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T09:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T10:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T11:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T12:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T13:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T14:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T15:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T16:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T17:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T18:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T19:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T20:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T21:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T22:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-01T23:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                          
                        <wml2:point>
                            <wml2:MeasurementTVP> 
                                      <wml2:time>2015-01-02T00:00:00Z</wml2:time>
                      <wml2:value>NaN</wml2:value>
                            </wml2:MeasurementTVP>
                        </wml2:point>                         
                    </wml2:MeasurementTimeseries>
                </om:result>

        </omso:PointTimeSeriesObservation>
    </wfs:member>
</wfs:FeatureCollection>

The data is nested within <wml2:MeasurementTimeseries gml:id="obs-obs-1-1-temperature"> for the temperature and within <wml2:MeasurementTimeseries gml:id="obs-obs-1-1-windspeedms"> for the wind speed (NaN's in this file).

I would like to iterate through those series separately and save them to .txt file in tabular format. I'm able to save the times series data, but I cant separate them column wise eg. to time|temp|wind speed format.

My current code works if the XML file has only one measurement (temp OR wind speed separately) because I only need to iterate through the file.

import xml.etree.cElementTree as ET

tree = ET.ElementTree(file='XML_file.xml')
def parser(item1,item2):
    return item1.text,item2.text

data = [parser(item1,item2) for item1,item2 in zip(tree.iter(tag='{http://www.opengis.net/waterml/2.0}time'),tree.iter(tag='{http://www.opengis.net/waterml/2.0}value'))]



with open('data.txt', 'w') as fp:
        fp.write('\n'.join('%s|%s' % x for x in data))

Because the measurements for temp and ws are the same length how could I iterate through them (different tag perhaps?) and return tuple for each time point eg. (time,temp value, winds speed value)

EDIT: This prints results. But if I add tag like this i.iter(tag='{http://www.opengis.net/waterml/2.0}MeasurementTimeseries') I get TypeError: iter() takes no keyword arguments.

for i in tree.iter(tag='{http://www.opengis.net/waterml/2.0}MeasurementTimeseries'):
    for j in i.iter():
        print j.text

This prints:

2015-01-01T00:00:00Z
4.6




2015-01-01T01:00:00Z
4.5

Upvotes: 1

Views: 1151

Answers (1)

abarnert
abarnert

Reputation: 365587

I think what you're asking for is this: Instead of finding all time and value tags anywhere in the file, you want to find the time and value tags only under the temperature tag. (And then do the same thing for the time and value tags only under the windspeed tag, and then zip the two together, but you could do that part yourself if you had the first part.)

To do this, you need a nested search.

You can do that explicitly, with two searches—e.g., iterate over the two MeasurementTimeseries, then, within each one, iterate over its time and value descendants:

def parse_one_series(series):
    return [parser(item1,item2) for item1,item2 in
            zip(series.iter(tag='{http://www.opengis.net/waterml/2.0}time'),
                series.iter(tag='{http://www.opengis.net/waterml/2.0}value'))]

data = zip(*(parse_one_series(series) for series in
           tree.iter(tag='{http://www.opengis.net/waterml/2.0}MeasurementTimeseries')))

And now, each element in data is a pair of pairs, the first being time and temp, the second being time and windspeed. Although you might want to organize things a little more nicely:

data = [(time, temp, wind) for (time, temp), (_, wind) in data]

Upvotes: 1

Related Questions