xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Помогите прочитать xml файл


Автор Сообщение
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

Увы, не помогл Sad
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

Нет, не помогли оба варианта Sad
Мне кажется, что так как <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!!! Smile, thanks a lot, you save my life Smile