Автор |
Сообщение |
ippromek
Новичок
Зарегистрирован: 24.03.2009
Сообщения: 4
|
[13663]
Вт Мар 24, 2009 22:40
Помогите прочитать xml файл
Есть xml файл следующего содержания:
<?xml version="1.0" encoding="ISO-8859-1"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:cb="http://centralbanks.org/cb/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3c.org/1999/02/22-rdf-syntax-ns#rdf.xsd">
<channel rdf:about="http://www.bankofcanada.ca/fx/daily_noon.html">
<title>BoC noon rate: U.S. dollar</title>
<link>http://www.bankofcanada.ca/fx/daily_noon.html</link>
<description>Current day's noon foreign exchange rates from the Bank of Canada. Published at about 12:15 ET.</description>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://www.bankofcanada.ca/rss/fx/noon/iexe0101.xml" />
</rdf:Seq>
</items>
<dc:language>en</dc:language>
<dc:date>2009-03-23</dc:date>
</channel>
<item rdf:about="http://www.bankofcanada.ca/rss/fx/noon/iexe0101.xml">
<title>CA: 0.8115 USD = 1 CAD 2009-03-23 Bank of Canada noon rate</title>
<link>http://www.bankofcanada.ca/fx/daily_noon.html</link>
<description>1 Canadian Dollar = 0.8115 USD (USD = U.S. dollar). These are the Bank of Canada's nominal noon exchange rates, published at about 12:15 ET each business day. These are neither buying nor selling rates, and should be used for reference purposes only.</description>
<dc:language>en</dc:language>
<dc:date>2009-03-23</dc:date>
<dc:format>text/html</dc:format>
<cb:country>CA</cb:country>
<cb:baseCurrency>CAD</cb:baseCurrency>
<cb:targetCurrency>USD</cb:targetCurrency>
<cb:value frequency="business" decimals="4">0.8115</cb:value>
<cb:rateType>noon</cb:rateType>
<cb:application>statistics</cb:application>
</item>
</rdf:RDF>
По смыслу это RSS feed с курсом одной валюты к другой за определенную дату. Мне надо считать данные из этого файла, например:
XmlDocument feedDocument = new XmlDocument();
feedDocument.Load(rssStream);
XmlNamespaceManager manager = new XmlNamespaceManager(feedDocument.NameTable);
manager.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
XmlNode titleNode =feedDocument.SelectSingleNode("/rdf/channel/title", manager);
И ничего - titleNode - пусто, не видит никак. Please advice
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13664]
Вт Мар 24, 2009 22:47
Re: Помогите прочитать xml файл
Код: XmlNode titleNode =feedDocument.SelectSingleNode("/rdf:rdf/channel/title", manager);
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
ippromek
Новичок
Зарегистрирован: 24.03.2009
Сообщения: 4
|
[13666]
Вт Мар 24, 2009 23:06
Увы, не помогл
XmlNode titleNode = feedDocument.SelectSingleNode("/rdf:rdf/channel/title", manager);
MessageBox.Show(titleNode.InnerText);
На MessageBox пишет error:
System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Значит titleNode пустое
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13668]
Вт Мар 24, 2009 23:28
Re: Помогите прочитать xml файл
Не заметил строки
ippromek писал(а): xmlns="http://purl.org/rss/1.0/"
Тогда так
Код: manager.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
manager.AddNamespace("rss", "http://purl.org/rss/1.0/");
XmlNode titleNode =feedDocument.SelectSingleNode("/rdf:rdf/rss:channel/rss:title", manager);
Может быть будет работать так
Код: manager.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
manager.AddNamespace("", "http://purl.org/rss/1.0/");
XmlNode titleNode =feedDocument.SelectSingleNode("/rdf:rdf/channel/title", manager);
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
ippromek
Новичок
Зарегистрирован: 24.03.2009
Сообщения: 4
|
[13670]
Вт Мар 24, 2009 23:48
Нет, не помогли оба варианта
Мне кажется, что так как <channel rdf:about="http://www.bankofcanada.ca/fx/daily_noon.html"> - channel имеет namespace rdf, то есть должно работать так:
manager.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
XmlNode titleNode = feedDocument.SelectSingleNode("/rdf:rdf/rdf:channel/rdf:title", manager);
но так тоже не работает.
|
Vasilisk
Наставник
Зарегистрирован: 17.05.2006
Сообщения: 370
Откуда: Украина, Харьков
|
[13672]
Ср Мар 25, 2009 00:38
ippromek писал(а): Мне кажется, что так как <channel rdf:about="http://www.bankofcanada.ca/fx/daily_noon.html"> - channel имеет namespace rdf
Нет. channel имеет неймспейс поумолчанию, т.е. "http://purl.org/rss/1.0/"
Еще одну вещь заметил - у Вас корневой элемент не rdf:rdf, а rdf:RDF. Т.е. должно быть так
Код: XmlNode titleNode =feedDocument.SelectSingleNode("/rdf:RDF/rss:channel/rss:title", manager);
P.S. А все потому, что Вам было влом оформить первое сообщение тегом [code]
_________________ С уважением Vasilisk
Уважайте читающих, используйте тэги [code ][/code]
|
ippromek
Новичок
Зарегистрирован: 24.03.2009
Сообщения: 4
|
[13675]
Ср Мар 25, 2009 01:32
YES!!! , thanks a lot, you save my life
|