XML sekamelskan perkaus

Anonyymi

Ihmettelen kovin koko XML:n tarkoitusta, koska varsinaisen datan sijaan se sisältää suurimmalta osin pelkkää roskaa. Kuinka esimerkiksi saadaan helpoiten talteen lämpötilatiedot tästä linkistä: http://opendata.fmi.fi/wfs/fin?service=WFS&version=2.0.0&request=GetFeature&storedquery_id=fmi::observations::weather::timevaluepair&fmisid=101520&

Ovat siis kätketty tälläiseen, ja tuosta tarvittaisiin vain aikatieto ja arvo. Yksittäisiä arvoja on siis kymmeniä.

<wml2:point><wml2:MeasurementTVP><wml2:time>2019-04-19T00:50:00Z</wml2:time><wml2:value>3.6</wml2:value></wml2:MeasurementTVP></wml2:point>

7

1258

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Suorita tämä koodi:

      var wmlNs = "http://www.opengis.net/waterml/2.0";
      var allPoints = document.getElementsByTagNameNS(wmlNs, "point");
      var clearData = Array.from(allPoints).map( p=>{
      var timeEl = p.getElementsByTagNameNS(wmlNs, "time")[0];
      var time = timeEl ? timeEl.textContent : "";
      var valueEl = p.getElementsByTagNameNS(wmlNs, "value")[0];
      var value = valueEl ? valueEl.textContent : "";
      return {time: time, value: value}
      });

      Nyt sinulla pitäisi olla kaikki 936 arvoa listassa clearData objekteina {time, value}.

      • Anonyymi

        Olen nyt yrittänyt tapella Pythonin ja XPathin kanssa, mutta en ole keksinyt mitä pitäisi laittaa xpathiin. Erroria pukkaa esim. jos yrittää päästä toiseen tasoon saakka, johon pääsin kyllä jsonin kautta pyöräyttämällä myös, mutta siitä ei saanut sitten purettua enempää.

        Tämä ei siis toimi:

        import requests
        from lxml import etree

        url = "http://opendata.fmi.fi/wfs/fin?service=WFS&version=2.0.0&request=GetFeature&storedquery_id=fmi::observations::weather::timevaluepair&fmisid=101520&"
        data = requests.get(url)
        root = etree.XML(data.text.encode("utf-8"))
        results = root.xpath("/wfs:FeatureCollection/wfs:member")

        Tästä yritin saada apuja: https://lxml.de/xpathxslt.html

        Taidan tehdä niin että otan stringinä käsittelyyn ja puran manuaalisesti. On tuo XML kyllä ihme sekamelskaa.


      • Anonyymi
        Anonyymi kirjoitti:

        Olen nyt yrittänyt tapella Pythonin ja XPathin kanssa, mutta en ole keksinyt mitä pitäisi laittaa xpathiin. Erroria pukkaa esim. jos yrittää päästä toiseen tasoon saakka, johon pääsin kyllä jsonin kautta pyöräyttämällä myös, mutta siitä ei saanut sitten purettua enempää.

        Tämä ei siis toimi:

        import requests
        from lxml import etree

        url = "http://opendata.fmi.fi/wfs/fin?service=WFS&version=2.0.0&request=GetFeature&storedquery_id=fmi::observations::weather::timevaluepair&fmisid=101520&"
        data = requests.get(url)
        root = etree.XML(data.text.encode("utf-8"))
        results = root.xpath("/wfs:FeatureCollection/wfs:member")

        Tästä yritin saada apuja: https://lxml.de/xpathxslt.html

        Taidan tehdä niin että otan stringinä käsittelyyn ja puran manuaalisesti. On tuo XML kyllä ihme sekamelskaa.

        TÄSSÄ PYTHON3 MALLIA
        Korvaa ??? tiedoston osoitteella.

        from xml.dom import minidom
        import urllib.request
        url = 'http://???'
        urllib.request.urlretrieve(url, "data.xml")
        mydoc = minidom.parse('data.xml')
        items = mydoc.getElementsByTagName('wml2:time')

        i=0
        for x in items:
        print(str(i) ": " items[i].lastChild.data)
        i=i 1

        Testaa tämä.


      • Anonyymi
        Anonyymi kirjoitti:

        TÄSSÄ PYTHON3 MALLIA
        Korvaa ??? tiedoston osoitteella.

        from xml.dom import minidom
        import urllib.request
        url = 'http://???'
        urllib.request.urlretrieve(url, "data.xml")
        mydoc = minidom.parse('data.xml')
        items = mydoc.getElementsByTagName('wml2:time')

        i=0
        for x in items:
        print(str(i) ": " items[i].lastChild.data)
        i=i 1

        Testaa tämä.

        Tuo on ihan lupaava lähtökohta, koska tulostaa kaikki ajat kuten pitääkin. Pitäisi vielä se mittausarvo ympätä tuohon.


      • Anonyymi
        Anonyymi kirjoitti:

        Tuo on ihan lupaava lähtökohta, koska tulostaa kaikki ajat kuten pitääkin. Pitäisi vielä se mittausarvo ympätä tuohon.

        Arvot mukaan vaikka näin:

        from xml.dom import minidom
        import urllib.request
        url = ???'
        urllib.request.urlretrieve(url, "data.xml")
        mydoc = minidom.parse('data.xml')
        times = mydoc.getElementsByTagName('wml2:time')
        values = mydoc.getElementsByTagName('wml2:value')

        i=0
        for x in times:
        print(str(i) ": " times[i].lastChild.data \
        " " values[i].lastChild.data)
        i=i 1


      • Anonyymi
        Anonyymi kirjoitti:

        Arvot mukaan vaikka näin:

        from xml.dom import minidom
        import urllib.request
        url = ???'
        urllib.request.urlretrieve(url, "data.xml")
        mydoc = minidom.parse('data.xml')
        times = mydoc.getElementsByTagName('wml2:time')
        values = mydoc.getElementsByTagName('wml2:value')

        i=0
        for x in times:
        print(str(i) ": " times[i].lastChild.data \
        " " values[i].lastChild.data)
        i=i 1

        Kiitokset! Nyt ymmärsin tuon logiikan. Hämäsi hieman tuo käyttämäsi for-lauseke.


    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. IL - PerSut tykittää - Vaaralliset tappajat vankilaan jopa loppuelämäksi!!

      Entistä rajumpi elinkautinen tulee – Vaaralliset tappajat vankilaan jopa loppuelämäksi Henkirikosten uusijat voidaan ja
      Maailman menoa
      39
      13918
    2. Päivi Räsänen vs. Abbas Bahmanpour

      (Bahmanpour on imaami Helsingissä) Syyttäjä siis jahtaa edelleen Räsästä tämän H-puheista, joissa hän on ilmeisesti vaa
      Maailman menoa
      154
      5481
    3. Demokratian uhka: Perussuomalaiset ja polarisoiva "me ja muut" -ajattelu

      Laurence Rees varoittaa, kuinka demokratian heikkeneminen ja autoritaaristen liikkeiden nousu voidaan liittää "me ja muu
      Maailman menoa
      200
      5089
    4. SIELTÄ SE TULI: Kepu-Kurvinen: "Emme enää lähde punavihreään hallitukseen"

      Nyt muuten nauretaan loppuviikko, että tähänkö kaatui Lindtmanin pääministerihaaveet. "Antti Kurvisen mukaan puolue ei
      Maailman menoa
      86
      4278
    5. "Rauhanomainen" miekkari hesassa: "Eläköön aseellinen vastarinta" - lakana

      Kyseessä on Suomen Palestiinalaisten yhdistyksen viime perjantaina järjestämä ”Hiljainen kynttiläkulkue Palestiinalaiste
      Maailman menoa
      87
      3561
    6. Palkansaajan oikeus nauttia työuransa hedelmistä

      Työeläkejärjestelmä on verrattavissa pyramidihuijaukseen, jossa alemmat tasot, eli nykyiset palkansaajat, toimivat maksa
      Maailman menoa
      109
      3058
    7. Äärioikeistopurran nukke Petteri Lapanen paniikissa

      Kun Suomen historian paras pääministeri antoi vankan lausunnon, kuinka "keskustelu politiikassa on käpertynyt lähinnä va
      Maailman menoa
      6
      3049
    8. HS - Sanna Marinin kirja on priimaluokan vedätys!

      Kirja-arvio|Toivo on tekoja tulisi ensisijaisesti nähdä maineen rahallisen hyödyntämisen voimaannuttavana merkkipaaluna.
      Maailman menoa
      14
      2939
    9. Vanhat miehet eivät muista

      Niinistö muistaa vain Marinin hölmistyneen ilmeen, mutta ei miksi möllötti sen näköisenä. Vanhanen taas ei muuten vaan
      Maailman menoa
      12
      2801
    10. Monella äärivasemmistolaisella C-paperit armeijasta

      Kuinka kävisi sodan tullen noille? Puolustusvoimat huomauttaa, että C-luokituksen saaneiden sijoittumisesta sodan aikan
      Maailman menoa
      39
      2517
    Aihe