Я первый раз делаю ЭТО - объясните на пальцах

Rynor

stay hungry
Я первый раз делаю ЭТО - объясните на пальцах

на сайте ЦБ РФ лежит ежедневно обновляющийся XML файлик
<?xml version="1.0" encoding="windows-1251" ?>
<ValCurs Date="30/11/2002" name="Foreign Currency Market">
<Valute ID="R01010">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>17,8463</Value>
</Valute>
.... еще куча валют ....
</ValCurs>

Уважаемые!
Опишите плиз алгоритм - как мне с ним работать, чтобы вытянуть один единственный курс, типа USD.
(Типа получи содержимое, прогони через функцию или прям к этому урлу обращайся вот этой функцией).

Я понимаю тупой вопрос, но ничего про XML еще не читал, никогда не работал, вроде в курсе что это такое, но практики 0(ноль).

Пошел за RTFM.

Заранее спасибо за помощь!
 

Леонов Василий

Guest
PHP:
$doc=xmldoc($xml); 
$ctx=xpath_new_context($doc); 
$foo=xpath_eval($ctx,"//value[position()=".$i."]/value");
где $xml - этот документ
а i номер USD в этом списке(я думаю он не меняется?)

или
PHP:
$foo=xpath_eval($ctx,"//value[./CharCode =='USD']/value");
так сложнее но стабильнее

а потом $foo[0]->get_content();

ещё вспомнил :)

PHP:
$doc=xmldoc($xml); 
$doc->get_element_by_id ($id);
где $id - id в теге valute, который содержит USD\
... или Xpath всё же лучше.. =)
 

Rynor

stay hungry
есть проблемы...

код 2 строчки:
$doc = xmldoc("http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002");
$doc->get_element_by_id ("R01235");

ругань:
Warning: Entity: line 1: in usd.php on line 2

Warning: error: in usd.php on line 2

Warning: Start tag expected, '<' not found in usd.php on line 2

Warning: http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002 in usd.php on line 2

Warning: ^ in usd.php on line 2

Fatal error: Call to a member function on a non-object in usd.php on line 3

подскажите, что не так?
 

Sababa

Guest
нда..

xmldoc($str);
$str - это well formed xml

он понятие не имеет, что ты ему на вход передаешь url

решение: прочитай url в переменную, а вот ее уже отдавай xmldoc
 

slach

Новичок
8)))
xmldoc()
ne rabotayet s remote files
PHP:
<?
$content = @implode('',file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002"));

if ($content) {
 $doc=domxml_open_mem($content);
 ...
}
?>
 

Rynor

stay hungry
он плохой, ругается...:

Warning: Entity: line 1: usd.php on line 5
Warning: error: in usd.php on line 5
Warning: Unsupported encoding windows-1251 in usd.php on line 5
Warning: in usd.php on line 5
Warning: ^ in usd.php on line 5
Fatal error: Call to a member function on a non-object in usd.php on line 6

юзаю расширение: extension=php_domxml.dll
больше ничего
 

slach

Новичок
<?
echo php_version();
?>


iconv.dll -> c:\winnt\system32\iconv.dll

may be your domxml extention (not PHP) compile without ICONV support
 

Rynor

stay hungry
php 4.3.0RC2 then i've tried php 4.2.3

> iconv.dll -> c:\winnt\system32\iconv.dll
done

but same errors...

>may be your domxml extention (not PHP) compile without ICONV support
i suppose :(

and what i must do? :)
 

Rynor

stay hungry
2 DAN:
спасибо!
тред прочитал, не один значит страдаю :)
где мне взять libxml2.dll? в поставке php/dll нет такой, ни в 4.2.3 ни в 4.3rc2 :(
счас отсюда бинарнирки качну посмотрю что будет
http://www.fh-frankfurt.de/~igor/projects/libxml/
 

Rynor

stay hungry
работает :)))
всем огромное спасибо за терпеливые и подробные ответы !!!
 

Rynor

stay hungry
только я так и не понял как мне распарсить полученный XML
чтобы получить цифру с сегодняшним курсом бакса
PHP:
$content = @implode('',file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/05/2002"));
if ($content) {
   $doc=xmldoc($content); //или $doc=domxml_open_mem($content);
   $ctx=xpath_new_context($doc); 
   $foo=xpath_eval($ctx,"//value[position()=5]/value");
}
делаю потом echo $foo; пустота
пробую
$foo[0]->get_content(); (line 9)
ругается не нее
Fatal error: Call to a member function on a non-object in usd.php on line 9

вот...
 

[DAN]

Старожил PHPClub
У меня получилось след. образом:

<?php

$content = @implode('',file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/05/2002"));

if ($content) {
$doc=xmldoc($content);
$ctx=xpath_new_context($doc);
$foo=xpath_eval($ctx,"//Valute[position()=5]/Value/text()");
}

echo $foo->nodeset[0]->content;

?>

Обрати внимание на то, что xpath-выражение другое. Предыдущее абсолютно не подходило для того документа, который мне вывалился по вышеозначенному URI.

P.S. Небольшая рекомендация. Если в мане что-то отсутствует, выводи не стесняясь переменную через var_dump(). Там много чего можно будет почерпнуть ,)
 
Сверху