Я новичок здесь и не знаю точно, как начать. Если я делаю что-то не так (задавая свой вопрос), пожалуйста, не стесняйтесь, скажите мне.
Проблема, которая у меня есть, проста для вас, я думаю. Я пытаюсь прочитать данные из файла XML (ЕЦБ публикует ежедневно): курсы валют
Я делаю это, но, вероятно, самым неэффективным способом. У тебя могут быть слезы на глазах. : -)
Мой код:
while (xmlReader.Read())
{
if (xmlReader.Name != "")
{
for (int i = 0; i < xmlReader.AttributeCount; i++)
{
//Prüfen ob es den Knoten/Element 'Cube' gibt
if (xmlReader.Name == "Cube")
{
//Falls der Knoten/Element nur 1 Attribut enthält, ist dies das Datum
if (xmlReader.AttributeCount == 1)
{
//Datum auslesen
xmlReader.MoveToAttribute("time");
tempDatum = DateTime.Parse(xmlReader.Value);
}
//Sind 2 Attribute im aktuellen Knoten/UnterElement, enthält dieser WährungsKürzel und Kurswert
if (xmlReader.AttributeCount == 2)
{
//Währung auslesen
xmlReader.MoveToAttribute("currency");
tempWaehrung = xmlReader.Value;
//Kurs auslesen
xmlReader.MoveToAttribute("rate");
tempKurs = double.Parse(xmlReader.Value.Replace(".", ",")); // Komma als DecimalSymbol
if (tempWaehrung.Equals("AUD")) AUD.Text = tempKurs.ToString();
if (tempWaehrung.Equals("BRL")) BRL.Text = tempKurs.ToString();
if (tempWaehrung.Equals("BGN")) BGN.Text = tempKurs.ToString();
/*and 29 other currencies...*/
//ausgelesene Werte zusammen in einer neuen Zeile eintragen
//DataRow neueZeile = dtWechselkurs.NewRow();
//neueZeile["Datum"] = tempDatum;
//neueZeile["Waehrung"] = tempWaehrung;
//neueZeile["Kurs"] = tempKurs;
//dtWechselkurs.Rows.Add(neueZeile);
}
xmlReader.MoveToNextAttribute();
}
}
}
}
/*foreach (DataRow row in dtWechselkurs.Rows)
{
foreach (var item in row.ItemArray)
{
//What should I do here?
}
}*/
}
protected void calculateCurrencies_Click(object sender, EventArgs e)
{
AUDamount.Text = (double.Parse(euro.Text) * double.Parse(AUD.Text)).ToString("0.00");
//and 31 other currencies...
}
У меня есть TextBox, в который пользователь вводит сумму и получает рассчитанные значения (через calcCurrencies_Click).
Пи c для курса и суммы австралийского доллара, то же самое для всех других валют
Я понимаю, что XMLReader работает. Но мне нужна какая-то структура данных, вероятно, как DataTable. Но я не знаю, как go пройти через него, чтобы избежать предложений if:
if (tempWaehrung.Equals ("AUD")) AUD.Text = tempKurs.ToString ();
Я просто хочу, чтобы tempWaehrung был именем переменной. И я анализирую от двойного до строкового и обратно и использую метки для хранения курса валюты вместо того, чтобы использовать правильную структуру данных (я не знаю, какую) для вычисления.
Так как мой Engli sh довольно плохо, надеюсь, вы, ребята, понимаете, что я пытаюсь сделать здесь. Должен быть лучший способ сделать это.
Заранее спасибо за вашу помощь, умные ребята.
Привет Альбрехт