Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Вытянуть данные из XML (http://forum.oszone.net/showthread.php?t=255977)

virus8 10-03-2013 22:21 2108304

Вытянуть данные из XML
 
Добрый день форумчане! Посоветуйте пожалуйста по поводу одной вещи. Как вытянуть данные их xml файла(http://bank-ua.com/export/currrate.xml
Вид xml файла такой
читать дальше »
<?xml version="1.0" encoding="windows-1251" ?>
- <chapter>
- <item>
<date>2013-03-11</date>
<code>036</code>
<char3>AUD</char3>
<size>100</size>
<name>австралійських доларів</name>
<rate>819.7787</rate>
<change>-2.5477</change>
</item>
- <item>
<date>2013-03-11</date>
<code>031</code>
<char3>AZM</char3>
<size>100</size>
<name>азербайджанських манатів</name>
<rate>1018.3463</rate>
<change>0.1297</change>
</item>
- <item>
<date>2013-03-11</date>
<code>826</code>
<char3>GBP</char3>
<size>100</size>
<name>англійських фунтів стерлінгів</name>
<rate>1202.1842</rate>
<change>-3.1461</change>
</item>
- <item>
<date>2013-03-11</date>
<code>974</code>
<char3>BYR</char3>
<size>10</size>
<name>білоруських рублів</name>
<rate>0.0093</rate>
<change>0</change>
</item>
- <item>
<date>2013-03-11</date>
<code>208</code>
<char3>DKK</char3>
<size>100</size>
<name>датських крон</name>
<rate>139.4963</rate>
<change>-0.2493</change>
</item>
- <item>
<date>2013-03-11</date>
<code>840</code>
<char3>USD</char3>
<size>100</size>
<name>доларів США</name>
<rate>799.3000</rate>
<change>0</change>
</item>
- <item>
<date>2013-03-11</date>
<code>978</code>
<char3>EUR</char3>
<size>100</size>
<name>ЄВРО</name>
<rate>1039.8893</rate>
<change>-1.9983</change>
</item>
- <item>
<date>2013-03-11</date>
<code>352</code>
<char3>ISK</char3>
<size>100</size>
<name>ісландських крон</name>
<rate>6.3745</rate>
<change>-0.0194</change>
</item>
- <item>
<date>2013-03-11</date>
<code>398</code>
<char3>KZT</char3>
<size>100</size>
<name>казахстанських тенге</name>
<rate>5.3011</rate>
<change>-0.0035</change>
</item>
- <item>
<date>2013-03-11</date>
<code>124</code>
<char3>CAD</char3>
<size>100</size>
<name>канадських доларів</name>
<rate>774.7648</rate>
<change>-2.2993</change>
</item>
- <item>
<date>2013-03-11</date>
<code>428</code>
<char3>LVL</char3>
<size>100</size>
<name>латвійських латів</name>
<rate>1484.4958</rate>
<change>-2.2159</change>
</item>
- <item>
<date>2013-03-11</date>
<code>440</code>
<char3>LTL</char3>
<size>100</size>
<name>литовських літів</name>
<rate>301.1728</rate>
<change>-0.5787</change>
</item>
- <item>
<date>2013-03-11</date>
<code>498</code>
<char3>MDL</char3>
<size>100</size>
<name>молдовських леїв</name>
<rate>65.1214</rate>
<change>-0.0791</change>
</item>
- <item>
<date>2013-03-11</date>
<code>578</code>
<char3>NOK</char3>
<size>100</size>
<name>норвезьких крон</name>
<rate>140.2129</rate>
<change>-0.1087</change>
</item>
- <item>
<date>2013-03-11</date>
<code>985</code>
<char3>PLN</char3>
<size>100</size>
<name>польських злотих</name>
<rate>250.5033</rate>
<change>-0.5842</change>
</item>
- <item>
<date>2013-03-11</date>
<code>643</code>
<char3>RUB</char3>
<size>10</size>
<name>російських рублів</name>
<rate>2.5983</rate>
<change>-0.012</change>
</item>
- <item>
<date>2013-03-11</date>
<code>702</code>
<char3>SGD</char3>
<size>100</size>
<name>сінгапурських доларів</name>
<rate>640.7599</rate>
<change>-0.6385</change>
</item>
- <item>
<date>2013-03-11</date>
<code>960</code>
<char3>XDR</char3>
<size>100</size>
<name>СПЗ</name>
<rate>1203.3772</rate>
<change>-2.5691</change>
</item>
- <item>
<date>2013-03-11</date>
<code>792</code>
<char3>TRL</char3>
<size>100</size>
<name>турецьких лір</name>
<rate>444.2642</rate>
<change>-1.6539</change>
</item>
- <item>
<date>2013-03-11</date>
<code>795</code>
<char3>TMM</char3>
<size>100</size>
<name>туркменських манатів</name>
<rate>280.4561</rate>
<change>0</change>
</item>
- <item>
<date>2013-03-11</date>
<code>348</code>
<char3>HUF</char3>
<size>1000</size>
<name>угорських форинтів</name>
<rate>34.7208</rate>
<change>-0.1775</change>
</item>
- <item>
<date>2013-03-11</date>
<code>860</code>
<char3>UZS</char3>
<size>100</size>
<name>узбецьких сумів</name>
<rate>0.3945</rate>
<change>0</change>
</item>
- <item>
<date>2013-03-11</date>
<code>203</code>
<char3>CZK</char3>
<size>100</size>
<name>чеських крон</name>
<rate>40.7640</rate>
<change>0.0095</change>
</item>
- <item>
<date>2013-03-11</date>
<code>752</code>
<char3>SEK</char3>
<size>100</size>
<name>шведських крон</name>
<rate>125.3785</rate>
<change>0.0899</change>
</item>
- <item>
<date>2013-03-11</date>
<code>756</code>
<char3>CHF</char3>
<size>100</size>
<name>швейцарських франків</name>
<rate>844.2030</rate>
<change>-2.7912</change>
</item>
- <item>
<date>2013-03-11</date>
<code>156</code>
<char3>CNY</char3>
<size>100</size>
<name>юанів женьміньбі (Китай)</name>
<rate>128.4988</rate>
<change>-0.0246</change>
</item>
- <item>
<date>2013-03-11</date>
<code>392</code>
<char3>JPY</char3>
<size>1000</size>
<name>японських єн</name>
<rate>84.6815</rate>
<change>-0.8242</change>
</item>
</chapter>


допустим мне из этих строк
<name>доларів США</name>
<rate>799.3000</rate>
нужно вытащить 799.300 и положить ее в double или string.

Пытался сделать вот по этому примеру
http://www.intmain.ru/parser-usd.html
но что-то не получается

ViRTaCe 11-03-2013 02:29 2108375

Linq to XML самый лучший вариант.

virus8 11-03-2013 21:39 2108834

Все справился, спасибо VIRTaCe.
Вот код кому нужен
Код:

string url = http://bank-ua.com/export/currrate.xml;
private void z_XML()
        {
            //читаем данные из файла
            XmlDocument xd = new XmlDocument();
            xd.Load(url);
            XmlNodeList list = xd.GetElementsByTagName("item");

            //переменная для записи искомого
            string Rate = "";


            for (int i = 0; i < list.Count; i++)
            {
                XmlElement code = (XmlElement)xd.GetElementsByTagName("code")[i];
                XmlElement rate = (XmlElement)xd.GetElementsByTagName("rate")[i];
                string pid = "840";

                //if (code.GetAttribute("code") == pid)
                if(code.Name == "code" && code.InnerText == pid)
                {
                    Rate = rate.InnerText;
                }
               
            }
            //вывод в richtextbox для проверки себе выводил
            richTextBox1.Text = Rate;


virus8 12-03-2013 00:00 2108943

Народ тут еще один вопрос по теме из последнего кода переменная
string Rate как её конвертнуть в double???
convert.todouble и double.parse не прокатуют - выдают ошибку, что то типа несовместимые данные.

ViRTaCe 12-03-2013 00:31 2108979

Цитата:

Цитата virus8
convert.todouble и double.parse не прокатуют - выдают ошибку, что то типа несовместимые данные. »

Возможно потому, что вместо точки - запятая, или наоборот (в зависимости от региональных настроек).

virus8 12-03-2013 00:49 2108991

Все спасибо большое за направление - куда думать)))
код
Код:

Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0];
String Source = USD.Replace('.', separator);
d_usd = Convert.ToDecimal(Source);


ViRTaCe 12-03-2013 01:08 2108999

Цитата:

Цитата virus8
а как это можно поправить?? »

Ну если проблема действительно в этом, то можно найти и заменить на нужный символ. Можно простым циклом, либо регуляркой.

virus8 12-03-2013 01:18 2109002

Да проблема была в этом заменил на точку(Гугл помог) - еще раз спасибо.


Время: 07:53.

Время: 07:53.
© OSzone.net 2001-