[VB] Krijgt XML data maar niet in string

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • The-Source
  • Registratie: Augustus 2001
  • Laatst online: 20:06
Nou ik ben al een tijdje bezig om via google het antwoord te vinden maar het lukt mij maar niet om het werkend te krijgen. Op dit moment heb ik de code terug gebracht naar de versie die geen foutmeldingen geeft maar dus ook geen data in de string waar ik deze wil.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Imports System.Net
Imports System.IO
Imports System.Xml.Linq
Imports System.Text

sub Main(parm as object)
    Dim Thuidig, Tmax, Tmin, Regen AS string = ""
    Dim RemoteURL = "http://api.worldweatheronline.com/weer.xml"  'Output structuur is in nieuw code stukje te zien.
    Dim Xxml As XDocument = XDocument.Load(RemoteURL)

    ' weer vandaag waardes:
    '<current_condition>.<observation_time>.Value = meettijdstip
    '<current_condition>.<temp_C>.Value = huidige temperatuur
    '<weather>.<maxtempC>.Value = Max temp hele dag
    '<weather>.<mintempC>.Value = min temp hele dag
    '<weather>.<hourly>.<chanceofrain>.Value  = kans op regen komende 24 uur
    'xml data is nog geen string
    Dim Tijdstip = Xxml.<current_condition>.<observation_time>.Value
    Dim Thuidig = Xxml.<current_condition>.<temp_C>.Value
    Dim Tmax = Xxml.<weather>.<maxtempC>.Value
    Dim Tmin = Xxml.<weather>.<mintempC>.Value
    Dim Regen = Xxml.<weather>.<hourly>.<chanceofrain>.Value
    
    Dim tekst = "Het weerbericht voor vandaag: maximum van " & Tmax & " graden en minima van " & Tmin & " graden. Er is z'n " & Regen & "% kans op regen. Nu is het ongeveer " & Thuidig & " graden"
    tekst = replace(tekst, " ", "-")
    hs.WriteLog("XML weer parser debug: ", tekst)
    
End Sub


De xml in kwestie: (ingekort en enkele witregels toegevoegd maar structuur is behouden)
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<data>

<request>
<type>City</type>
<query>Amsterdam, Netherlands</query>
</request>

<current_condition>
<observation_time>06:09 PM</observation_time>
<temp_C>6</temp_C>
<temp_F>43</temp_F>
<FeelsLikeC>2</FeelsLikeC>
<FeelsLikeF>36</FeelsLikeF>
</current_condition>

<weather>
<date>2015-03-18</date>
<astronomy>
<sunrise>06:47 AM</sunrise>
<sunset>06:47 PM</sunset>
<moonrise>05:35 AM</moonrise>
<moonset>04:29 PM</moonset>
</astronomy>
<maxtempC>15</maxtempC>
<maxtempF>60</maxtempF>
<mintempC>5</mintempC>
<mintempF>40</mintempF>
<uvIndex>2</uvIndex>
<hourly>
<time>24</time>
<tempC>15</tempC>
<tempF>60</tempF>
<chanceofrain>0</chanceofrain>
</hourly>
</weather>
</data>


En de output:
code:
1
Het-weerbericht-voor-vandaag:-maximum-van--graden-en-minima-van--graden.-Er-is-z'n-%-kans-op-regen.-Nu-is-het-ongeveer--graden


Wat is dus al heb geprobeerd is eerst de Vars aanmaken met As string optie.
Achter de .Value ook nog eens .ToString() tevens ook nog eens los de variable met de ToString te pushen. De voorbeeld scripts met de .Descendants optie krijg ik ook niet werkend 8)7
De meest voorkomende errors zijn als volgt:
code:
1
2
3
HasElements' is not a member of 'System.Xml.Linq.XDocument
Explicit initialization is not permitted with multiple variables declared with a single type specifier.
Namespace or type specified in the Imports 'System.Core' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.


Ik zal wel iets aardig over het hoofd zien of niet snappen O-) maar word er ondertussen aardig moe van.

Taal fouten inbegrepen ;)
Mijn AI Art YouTube kanaal


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Waarom doe je 2x dim? Zoiets werkt veel fijnder (normaal gezien)
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Imports System.Net
Imports System.IO
Imports System.Xml.Linq
Imports System.Text

sub Main(parm as object)
    Dim TijdStip, Thuidig, Tmax, Tmin, Regen AS string = "" 'weet zelfs niet of dit wel werkt in vb.net
    Dim RemoteURL as string = "http://api.worldweatheronline.com/weer.xml"  'Output structuur is in nieuw code stukje te zien.
    Dim Xxml As XDocument = XDocument.Load(RemoteURL)

    ' weer vandaag waardes:
    '<current_condition>.<observation_time>.Value = meettijdstip
    '<current_condition>.<temp_C>.Value = huidige temperatuur
    '<weather>.<maxtempC>.Value = Max temp hele dag
    '<weather>.<mintempC>.Value = min temp hele dag
    '<weather>.<hourly>.<chanceofrain>.Value  = kans op regen komende 24 uur
    'xml data is nog geen string
    Tijdstip = Xxml.<current_condition>.<observation_time>.Value
    Thuidig = Xxml.<current_condition>.<temp_C>.Value
    Tmax = Xxml.<weather>.<maxtempC>.Value
    Tmin = Xxml.<weather>.<mintempC>.Value
    Regen = Xxml.<weather>.<hourly>.<chanceofrain>.Value
    
    dim tekst as string = "Het weerbericht voor vandaag: maximum van " & Tmax & " graden en minima van " & Tmin & " graden. Er is z'n " & Regen & "% kans op regen. Nu is het ongeveer " & Thuidig & " graden"
    tekst = replace(tekst, " ", "-")
    hs.WriteLog("XML weer parser debug: ", tekst)
    
End Sub


En zit er wel data in je Tmax enzo

[ Voor 3% gewijzigd door Damic op 20-03-2015 22:17 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • The-Source
  • Registratie: Augustus 2001
  • Laatst online: 20:06
Ik krijg dan de volgende errors:
code:
1
2
3
 Explicit initialization is not permitted with multiple variables declared with a single type specifier.

 Namespace or type specified in the Imports 'System.Core' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.

Elke waarde wordt als leeg weggeschreven in de voorbeeld code. Dat is te zien aan de -- stukjes. Alleen %kans op neerslag zit er met opzet geen spatie voor het % teken.

[ Voor 16% gewijzigd door The-Source op 20-03-2015 22:25 ]

Taal fouten inbegrepen ;)
Mijn AI Art YouTube kanaal


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Eventjes snel nagekeken:
Dim TijdStip, Thuidig, Tmax, Tmin, Regen AS string = ""
Elke variabele apart declareren, maar mag op dezelfde lijn
Dim TijdStip AS string, Thuidig AS string, Tmax AS string, Tmin AS string, Regen AS string

en <> word normaal niet gebruik in vb als varaibele ;)

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • The-Source
  • Registratie: Augustus 2001
  • Laatst online: 20:06
Zonder de <> om de xml velden heen krijg ik de volgende error:
code:
1
Compiling script C:\Program Files (x86)\HomeSeer HS3\scripts\weerberichtXMLparser.vb: 'current_condition' is not a member of 'System.Xml.Linq.XDocument'.

Met de <> tekens erbij krijg ik de volgende output (zelfde als hierboven)
code:
1
Het-weerbericht-voor-vandaag:-maximum-van--graden-en-minima-van--graden.-Er-is-z'n-%-kans-op-regen.-Nu-is-het-ongeveer--graden

Het eerst aanmaken van de variabelen heeft helaas geen andere output.

Taal fouten inbegrepen ;)
Mijn AI Art YouTube kanaal


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Natuurlijk dat je die error krijgt, lees eens wat daar staat ;)
spoiler:
TijdStip = Xxml.Element("current_condition").Element("observation_time").Value

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • The-Source
  • Registratie: Augustus 2001
  • Laatst online: 20:06
Ik waardeer je moeitje hoor maar helaas werkt de code niet
Heb het geheel aangepast naar:
Visual Basic:
1
2
3
4
5
     TijdStip = Xxml.Element("current_condition").Element("observation_time").Value
    Thuidig = Xxml.Element("current_condition").Element("temp_C").Value
    Tmax = Xxml.Element("weather").Element("maxtempC").Value
    Tmin = Xxml.Element("weather").Element("mintempC").Value
    Regen = Xxml.Element("weather").Element("hourly").Element("chanceofrain").Value

Ik krijg daarmee de volgende error:
Exception has been thrown by the target of an invocation.Object reference not set to an instance of an object
Deze melding blijft hetzelfde als ik ook maar 1 veld probeer

Taal fouten inbegrepen ;)
Mijn AI Art YouTube kanaal


Acties:
  • 0 Henk 'm!

  • TallManNL
  • Registratie: Oktober 2005
  • Laatst online: 09-10 17:59
Ehh, ben ik nou blind of vergeet je heel de <data> tag in je xml?

geheelonthouder met geheugenverlies


Acties:
  • 0 Henk 'm!

  • The-Source
  • Registratie: Augustus 2001
  • Laatst online: 20:06
Nou het is toch nog gelukt. Zat dus nog een klein 'dom' foutje in... het root element werd niet genoemd/gebruikt :X

code had er dus zo uit moeten zien.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 Dim Xxml As XDocument = XDocument.Load(RemoteURL)
    Dim TijdStip AS string, Thuidig AS string, Tmax AS string, Tmin AS string, Regen AS string
    ' weer vandaag waardes:
    '<current_condition>.<observation_time>.Value = meettijdstip
    '<current_condition>.<temp_C>.Value = huidige temperatuur
    '<weather>.<maxtempC>.Value = Max temp hele dag
    '<weather>.<mintempC>.Value = min temp hele dag
    '<weather>.<hourly>.<chanceofrain>.Value  = kans op regen komende 24 uur
    'xml data is nog geen string
    TijdStip = Xxml.Element("data").Element("current_condition").Element("observation_time").Value
    Thuidig = Xxml.Element("data").Element("current_condition").Element("temp_C").Value
    Tmax = Xxml.Element("data").Element("weather").Element("maxtempC").Value
    Tmin = Xxml.Element("data").Element("weather").Element("mintempC").Value
    Regen = Xxml.Element("data").Element("weather").Element("hourly").Element("chanceofrain").Value
    
    Dim tekst = "Het weerbericht voor vandaag: maximum van " & Tmax & " graden en minima van " & Tmin & " graden. Er is z'n " & Regen & "% kans op regen. Nu is het ongeveer " & Thuidig & " graden"
    tekst = replace(tekst, " ", "-")
    hs.WriteLog("XML weer parser debug: ", tekst)


En output word dan: Het-weerbericht-voor-vandaag:-maximum-van-13-graden-en-minima-van-4-graden.-Er-is-z'n-0%-kans-op-regen.-Nu-is-het-ongeveer-3-graden

edit: Ja dat was het dus ;)

Taal fouten inbegrepen ;)
Mijn AI Art YouTube kanaal


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Juist ja bovenste node ook mee nemen :D

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag

Pagina: 1