I xml in Variablen bin Parsen wie sowie kann ich Klassenvariablen außerhalb eines Parsing-Anweisung wp7
void myClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
XElement currencyElements = XElement.Parse(e.Result);
XNamespace gesmes = "http://www.gesmes.org/xml/2002-08-01";
XNamespace ns = "http://www.ecb.int/vocabulary/2002-08-01/eurofxref";
usd=Convert.ToDouble(currencyElements.Descendants(ns +"Cube")
.Where(x=>x.Attribute("currency")!=null)
.Where(x => x.Attribute("currency")
.Value == "USD")
.Select(x => new ClassRates
{
usd=Convert.ToDouble(x.Attribute("rate").Value)
}));
else
{
textBlock1.Text = e.Error.ToString();
}
}
ist hier meine Klasse ClassRates
public class ClassRates
{
public String curName { get; set; }
public double curRate { get; set; }
public double usd, jpy, bgn, czk, dkk,
gbp, huf, ltl, lvl, pln, ron, sek, chf, nok,
hrk, rub, try1, aud, brl, cad, cny, hkd, idr,
ils, inr, krw, mxn, myr, nzd, php, sgd, thb, zar;
}
die Variable usd
ist nicht verfügbar außerhalb von der Parsing-Block für Berechnungen. Liegt das daran, dass ich Elemente über die Klasse zum Parsen auswähle? Gibt es eine Arbeit? versucht haben, ein Wörterbuch/Liste/Array zu implementieren für Preise, aber auch nicht funktioniert gespeichert werden, hier ist die Version, wo ich versuche, ein Wörterbuch
Dictionary<string, double> rates = new Dictionary<string, double>();
String xml = e.Result;
XElement doc = XElement.Parse(xml);
XNamespace ns = XNamespace.Get("http://www.gesmes.org/xml/2002-08-01");
XNamespace masterNs = XNamespace.Get("http://www.ecb.int/vocabulary/2002-08-01/eurofxref");
doc.Element(ns.GetName("Envelope"))
.Element(masterNs.GetName("Cube"))
.Elements(masterNs.GetName("Cube"))
.ToList().ForEach(cube =>
{
var cubeCurrencies = cube.Descendants(masterNs.GetName("Cube"));
cubeCurrencies.ToList().ForEach(currency =>
{
var country = currency.Attribute("currency").Value;
var rate = currency.Attribute("rate").Value;
rates.Add(country, double.Parse(rate));
});
});
dies führt zu einer Nullreferenceexception zu verwenden, die ich kann‘ t finden. Irgendwelche Gedanken gern gesehen,
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time="2012-04-12">
<Cube currency="USD" rate="1.3153"/>
<Cube currency="JPY" rate="106.54"/>
<Cube currency="BGN" rate="1.9558"/>
<Cube currency="CZK" rate="24.803"/>
<Cube currency="DKK" rate="7.4384"/>
<Cube currency="GBP" rate="0.82470"/>
<Cube currency="HUF" rate="296.90"/>
<Cube currency="LTL" rate="3.4528"/>
<Cube currency="LVL" rate="0.6989"/>
<Cube currency="PLN" rate="4.1802"/>
<Cube currency="RON" rate="4.3745"/>
<Cube currency="SEK" rate="8.8912"/>
<Cube currency="CHF" rate="1.2027"/>
<Cube currency="NOK" rate="7.6100"/>
<Cube currency="HRK" rate="7.4758"/>
<Cube currency="RUB" rate="38.7840"/>
<Cube currency="TRY" rate="2.3664"/>
<Cube currency="AUD" rate="1.2645"/>
<Cube currency="BRL" rate="2.4075"/>
<Cube currency="CAD" rate="1.3132"/>
<Cube currency="CNY" rate="8.2961"/>
<Cube currency="HKD" rate="10.2128"/>
<Cube currency="IDR" rate="12055.30"/>
<Cube currency="ILS" rate="4.9348"/>
<Cube currency="INR" rate="67.8550"/>
<Cube currency="KRW" rate="1500.58"/>
<Cube currency="MXN" rate="17.2124"/>
<Cube currency="MYR" rate="4.0360"/>
<Cube currency="NZD" rate="1.6001"/>
<Cube currency="PHP" rate="56.176"/>
<Cube currency="SGD" rate="1.6507"/>
<Cube currency="THB" rate="40.564"/>
<Cube currency="ZAR" rate="10.4472"/>
</Cube>
</Cube>
</gesmes:Envelope>
mh
Dieser Code wird so vermasselt, ich weiß nicht einmal, wo ... Mein Freund beginnen, bitte nicht mich falsch (ich meine nicht respektlos) ich glaube, Sie brauchen Linq zu verstehen vor dem Start Code so schreiben! –
der Parsing-Code? Ich gehe mit Beispielen und Empfehlungen, die ich gesehen habe, nicht viel über MSDN für Linq, wo finde ich Erklärungen, wie man es benutzt? – mhSligo
Passt Ihre XML-Datei direkt zu Ihrem ClassRates-Objekt? Wenn dies der Fall ist, können Sie es möglicherweise direkt mithilfe von XML-Serialisierung oder DataContractSerializer deserialisieren und Ihr Leben vereinfachen. – earthling