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

1120

    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. Sairaammaksi menee: Musk alkaa sensuroida Zelenskyin viestintää X:ssä

      IL: Musk puuttuu Zelenskyin viestintään – X:ään tulossa muutoksia "Elon Musk sanoo korjaavansa X:n, jotta käyttäjät voi
      Maailman menoa
      352
      3184
    2. Mihin sinussa haluan koskea

      Tilanne, että pääsisin tutustumaan eri kohtiin sinussa, mitä haluaisin kokeilla. Käsiin haluaisin tutustua, hieroa niitä
      Ikävä
      67
      2810
    3. Kerro nyt jotain

      Itsestäsi minkä haluaisit kaivattusi tietävän?
      Ikävä
      128
      1806
    4. On tämä meidän ikäero jo turhan suuri

      Kannattaisi tutustua samanikäisiin.
      Ikävä
      118
      1490
    5. Toisen ihmisen sydämellä

      leikkiminen on äärettömän moraalitonta. Antaa turhiaa toiveita ja sitten olla kuin mitään ei olisi tapahtunut. Kuinka vo
      Ikävä
      146
      1400
    6. Oho! Toivo Sukari paljastaa erikoisista iltatoimista Nadja-vaimon kanssa: "Hän aina putsaa mun..."

      Oho! Onpa iltatoimet tällä pariskunnalla. Toivo Sukari ja Nadja Sukari menivät naimisiin v. 2019. Lue lisää: https://
      Suomalaiset julkkikset
      30
      1323
    7. PAM:in mainos, älä mene tänään ruokakauppaan

      kannatan kovasti kaupan työntekijöille lisää liksa. MUTTA lakossa on huonoa, nyt kauppiaat näkevät kuinka vähällä henki
      Ammattiliitot
      155
      1268
    8. Mitä ajattelet kun

      Katsot kaivattuasi silmiin? Mitä näet silmissä?
      Ikävä
      69
      1100
    9. Millaisena luonteena

      Pidät kaivattuasi??
      Ikävä
      74
      1099
    10. Olen otettu, mutta turhaan kulta testailet

      Sinua minä vaan ❤️
      Ikävä
      70
      1040
    Aihe