QuidMedlem sedan juni 20006 025 inlägg Jag har idag en väderfunktion på en av mina webbplatser som bygger på att SMHI laddar upp en .txt-fil via FTP som jag sedan läser ut information ifrån och presenterar vädret med lite bilder och text.
Nu håller dom dock på att byta ut systemet och jag har istället fått tillgång till en XML-fil på deras server som jag nu ska använda för att läsa ut informationen.
Filen ser ut såhär:
<PRODUCT generator="SMHI" productid="Webservice, observationer">
<user_def>ProductGenerated:2010-02-12 09:40</user_def>
<type name="Falkenberg">
<prop name="day">2010-02-12</prop>
<prop name="time">10:00</prop>
<prop name="temp">-4</prop>
<prop name="relhum">91</prop>
<prop name="pressure">1023</prop>
<prop name="w_pointer">4</prop>
<prop name="wind_strength">4</prop>
<prop name="wind_direction">NO</prop>
<prop name="weather">Halvklart</prop>
<prop name="precipitation">0.0</prop>
<prop name="sun_up"/>
<prop name="sun_down"/>
</type>
</PRODUCT>
Jag har tidigare byggt en liknande funktion med hjälp av Microsoft.XMLHTTP, men där hämtade jag en hel webbsida och använde sedan (med hjälp av webforum) RegEXP för att hitta och presentera just den informationen jag vill ha ut. Men nu när det är XML, snyggt uppradat och allt så tänkte jag att man kanske kunde slippa det?
Finns det något enklare sätt att läsa in och plocka ut just dom delar av datan som jag vill ha eller är det regEXP som gäller ändå?
QuidMedlem sedan juni 20006 025 inlägg Nu har jag kommit lite längre :)
Jag börjar med att läsa in filen:
SET objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objXMLHTTP.Open "GET", "adressen till XML-filen", False
objXMLHTTP.Send()
WeatherXML = objXMLHTTP.responseText
SET objXMLHTTP = Nothing
Då får jag en input liknande den ovan, sen tänkte jag splitta in den i en array:
myArray = Split(WeatherXML,vbCRLF)
Men allt hamnar i samma "rad" i arrayen, varför?
Jag har även provar att strippa bort alla kod-taggar innan splitten men blir bara en rad ändå.
QuidMedlem sedan juni 20006 025 inlägg Det skulle visst vara:
myArray = Split(WeatherXML,Chr(10))
Nu kan jag gå vidare! :)
dAEkMedlem sedan feb. 20041 816 inlägg Nej, du ska inte använda regex för XML! Eller ja, du gör som du vill. ;)
Annars borde du kunna använda en DOM-parser. Det ger en betydligt mer lättläst kod.
Att läsa in en fil är enkelt:
function LoadDocument(filePath)
dim document
set document = Server.CreateObject("Microsoft.XMLDOM")
document.async = false
document.Load(filePath)
set LoadDocument = document
set document = nothing
end function
dim weather = LoadDocument("weather.xml")
När man har filen i minnet kan man läsa ut info m.h.a. XPath:
dim day = weather.selectSingleNode("//type/prop[@name='day']").Text
dim temp = weather.selectSingleNode("//type/prop[@name='temp']").Text
[...]
Nåt sånt borde få dig på banan iaf. Regex är skitbra för rätt ändamål men inte för Xml.
QuidMedlem sedan juni 20006 025 inlägg Då var jag tillbaka på jobbet efter en veckas sjukdom, och då ska man ta tag i detta igen :)
Jag får följande fel: Objektet stöder inte egenskapen eller metoden.
Så det känns som om det saknas något på min maskin, det är Windows 7 64-bitar och vad jag kan förstå efter att ha läst detta: http://en.wikipedia.org/wiki/MSXML så ska det ingå i Windows 7.
Någon aning om vad som saknas?
/edit:
Det var ju själv som hade skrivit fel, så nu funkar allt.
Tack för all hjälp!