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>
XML sekamelskan perkaus
7
1330
Vastaukset 7
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 1Kiitokset! 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
Ampuminen kylpylässä
Onko vornasen timbe käynyt hiukan kylpemässä vai mikä tämä ampumatapaus on kylpylässä? Tuntuu aika villi meno olevan naa751739- 241216
Kemijärvellä vesionnettomuus
Pitkänsillan ja taiteilijanniemen välillä nähty henkilön painuvan veden alle. Mitä on tapahtunut? Onko vesihiisi taas as341112Hei, voitko kuunnella
Voisitko auttaa minua selvittämään asioita? En halua ajaa sinua hulluuteen kanssani, en sitoa sinua, en esittää vaatimu135933Joku porukka lähtenyt täältä
Ihmeen hiljainen on palsta nyt. Yleensä tänne tulvii aloituksia yms, mutta nyt on kyllä erikoisen hiljaista.189826- 64704
- 77632
Olipa yllätys
Kuten hyvin moni tiesi/arvasi että valetta alusta loppuun toi *olemme ystäviä* satu. Instassaan käsi kädessä kuva kertoo192629On todella ikävää
Todella ikävää, että asiat ovat menneet tällaisiksi. Tämä ei ollut missään vaiheessa tarkoitukseni. Olen tehnyt virheit79608- 49571
Se kun olit pitkästä aikaa silmieni edessä
Oli kyllä sykähdyttävää. Tiedätkö, mikä laittaa minut ikävöimään sinua? Kun palautan mieleeni valtavan ihanan olemuksen,32528- 55517
- 57502
- 36474
Oletteko koskaan torjuneet kaivattuanne?
Minä olen, kun en silloin tajunnut vielä ihastuneeni. Yritin paikata tapahtunutta, mutta ei onnistunut enää.25457Kai sä mies ymmärrät..
..ettet jättänyt vaihtoahtoa. Tottakai toivon vielä, että pystyisit toimimaan niin että asiat korjaantuisivat. Vahvast28432- 33423
- 40417
- 16409
- 82398