Очень просто парсер...
1.
ШЕДЕВР (13.05.2011 / 14:36)
Вот данные, которые надо взять
http://nbt.tj/ru/kurs/?c=4&id=28&lg=ru&d=13-05-2011&export=xmlout
это курс валют. данные выводятся по такому типу:
<Valute ID="036">
<CharCode>AUD</CharCode>
<Nominal>1</Nominal>
<Name>Австралийский доллар</Name>
<Value>4,7622</Value>
</Valute>
<Valute ID="944">
<CharCode>AZN</CharCode>
<Nominal>1</Nominal>
<Name>Азербайджанский манат</Name>
<Value>5,6974</Value>
</Valute>
//и т.д....
как сделать выбор отдельных элементов, например с Valute ID 1 взять данные name и value и вывести на страницу php...
заранее спасибо!
2.
KOZZ (13.05.2011 / 14:37)
это же xml.
вроде функция есть в пхп какая то встроенная по парсингу xml
3.
ШЕДЕВР (13.05.2011 / 14:40)
ну да... Я не юзал xml, поэтому и спрашиваю :-)
http://nbt.tj/ru/kurs/?c=4&id=28&dm=2011-05-13&lg=ru&export=xml вот тут еще выборка есть.... но сути это не меняет, парсировать не знаю как ;-(
4.
KOZZ (13.05.2011 / 14:43)
клац
5.
ШЕДЕВР (13.05.2011 / 14:48)
вот здесь хорошо описано:
http://grigorieff.ru/?p=183
оказывается легко... хотя помощьопытногокодера не помешает ...
6.
ШЕДЕВР (13.05.2011 / 15:14)
<?php
$xmlstr = "http://nbt.tj/ru/kurs/?c=4&id=28&lg=ru&d=13-05-2011&export=xmlout"; //путь к xml, здесь ошибка чтения...
$xml = new SimpleXMLElement($xmlstr); // генерация пых кода из xml
echo $xml->Valute[0]->Name; // вывыод
?>
Добавлено через 00:14 сек.
не работает(( в чем проблема
7.
Алексей (13.05.2011 / 15:51)
$valute = simplexml_load_file("http://nbt.tj/ru/kurs/?c=4&id=28&lg=ru&d=13-05-2011&export=xmlout");
print_r($valute->Valute[0]);
8.
smartvbxos7 (13.05.2011 / 15:53)
Скрипт в зц поищи я выкладывал для wm || rotor
9.
ШЕДЕВР (13.05.2011 / 20:06)
а как сделать этот же вывод отдельно без вывода всех переменных в массиве? т.е. отдельно через echo....
СПАСИБО!
10.
Дмитрий (13.05.2011 / 20:52)
дык, что мешает регулярками отфильтровать, к примеру, содержимое
<Value>4,7622</Value>
и так далее?
11.
ШЕДЕВР (13.05.2011 / 20:53)
10.
dima.london, помоги это сделать?
12.
ШЕДЕВР (13.05.2011 / 22:39)
неужели никто не знает как его вывести :-(
13.
ramzes (13.05.2011 / 22:56)
<?php
$sss = file_get_contents('http://nbt.tj/ru/kurs/?c=4&id=28&lg=ru&d=13-05-2011&export=xmlout');
preg_match_all('|<([^<\/]+)>([^<]+)<\/|is', $sss, $res);
$l = 0;
foreach($res[2] as $data){
$l++;
echo $data.'; ';
if($l==4){ $l = 0; echo'<hr />'; }
}
?>
14.
ШЕДЕВР (13.05.2011 / 23:07)
спасибо. а то что кодировка отображает символы не корректно?ты тестировал, у тебя русские буквы показываются?
15.
ШЕДЕВР (13.05.2011 / 23:21)
$sss=iconv("cp1251", "utf-8", $sss);
СПАСИБО!
16.
ramzes (13.05.2011 / 23:39)
<?php
$sss = iconv('windows-1251', 'utf-8', file_get_contents('http://nbt.tj/ru/kurs/?c=4&id=28&lg=ru&d=13-05-2011&export=xmlout'));
preg_match_all('|<([^<\/]+)>([^<]+)<\/|is', $sss, $res);
$valute = array();
$l = 0;
$arr = array();
foreach($res[2] as $data){
$l++;
if($l==1){
$name = $data;
}
$arr[$name][$l] = $data;
if($l==4){
$l = 0;
$valute[] = $arr;
$arr = array();
}
}
print_r($valute);
?>
так пожалуй поудобнее будет
_______________
[PKR] => Array ( [1] => PKR [2] => 10 [3] => Пакистанских рупий [4] => 0,5314 )
[PLN] => Array ( [1] => PLN [2] => 1 [3] => Польский злотый [4] => 1,6240 )
[SAR] => Array ( [1] => SAR [2] => 1 [3] => Риал Саудовской Аравии [4] => 1,2014 )
[RUB] => Array ( [1] => RUB [2] => 1 [3] => Российский рубль [4] => 0,1606 )
[XDR] => Array ( [1] => XDR [2] => 1 [3] => СДР [4] => 7,2102 )
[SGD] => Array ( [1] => SGD [2] => 1 [3] => Сингапурский доллар [4] => 3,6163 )
Кеширование необходимо, скорость генерации того файла кошмарная
17.
Алексей (14.05.2011 / 08:11)
ramzes (13 Мая 2011 / 23:39)
<?php
$sss = iconv('windows-1251', 'utf-8', file_get_contents('http://nbt.tj/ru/kurs/?c=4&id=28&lg=ru&d=13-05-2011&export=xmlout'));
preg_match_all('|<([^<\/]+)>([^<]+)<\/|is', $sss, $res);
$valute = array();
$l = 0;
$arr = array();
foreach($res[2] as $data){
$l++;
if($l==1){
$name = $data;
}
$arr[$name][$l] = $data;
if($l==4){
$l = 0;
$valute[] = $arr;
$arr = array();
}
}
print_r($valute);
?>
так пожалуй поудобнее будет
_______________
[PKR] => Array ( [1] => PKR [2] => 10 [3] => Пакистанских рупий [4] => 0,5314 )
[PLN] => Array ( [1] => PLN [2] => 1 [3] => Польский злотый [4] => 1,6240 )
[SAR] => Array ( [1] => SAR [2] => 1 [3] => Риал Саудовской Аравии [4] => 1,2014 )
[RUB] => Array ( [1] => RUB [2] => 1 [3] => Российский рубль [4] => 0,1606 )
[XDR] => Array ( [1] => XDR [2] => 1 [3] => СДР [4] => 7,2102 )
[SGD] => Array ( [1] => SGD [2] => 1 [3] => Сингапурский доллар [4] => 3,6163 )
Кеширование необходимо, скорость генерации того файла кошмарная
это через жопу у тебя както
<?php
$valute = simplexml_load_file("http://nbt.tj/ru/kurs/?c=4&id=28&lg=ru&d=13-05-2011&export=xmlout");
for ( $i=0; $i<=37; $i++ )
{
print "<pre>";
print "Char Code " . $valute -> Valute[$i] -> CharCode . "<br/>";
print "Nominal " . $valute -> Valute[$i] -> Nominal . "<br/>";
print "Name " . $valute -> Valute[$i] -> Name . "<br/>";
print "Value " . $valute -> Valute[$i] -> Value . "<br/>";
print "</pre>";
}
?>
18.
KOZZ (14.05.2011 / 09:31)
17.
МегабиТ, ну так у рамзеса то универсальный метод.
<?
print "<pre>";
print "Char Code " . $valute -> Valute[$i] -> CharCode . "<br/>";
print "Nominal " . $valute -> Valute[$i] -> Nominal . "<br/>";
print "Name " . $valute -> Valute[$i] -> Name . "<br/>";
print "Value " . $valute -> Valute[$i] -> Value . "<br/>";
print "</pre>";
?>
вот это уже больше похоже на извращение.
зачем для каждой строчки print юзать?
<?
echo "
<pre>
Char Code $valute -> ".Valute[$i]." -> CharCode <br/>;
Nominal $valute -> ".Valute[$i]." -> Nominal<br/>
Name $valute -> ".Valute[$i]." -> Name<br/>
Value $valute -> ".Valute[$i]." -> Value<br/>
</pre>
";
?>
19.
Алексей (14.05.2011 / 09:37)
eGo (14 Мая 2011 / 09:31)
17. МегабиТ, ну так у рамзеса то универсальный метод.
<?
print "<pre>";
print "Char Code " . $valute -> Valute[$i] -> CharCode . "<br/>";
print "Nominal " . $valute -> Valute[$i] -> Nominal . "<br/>";
print "Name " . $valute -> Valute[$i] -> Name . "<br/>";
print "Value " . $valute -> Valute[$i] -> Value . "<br/>";
print "</pre>";
?>
вот это уже больше похоже на извращение.
зачем для каждой строчки print юзать?
<?
echo "
<pre>
Char Code $valute -> ".Valute[$i]." -> CharCode <br/>;
Nominal $valute -> ".Valute[$i]." -> Nominal<br/>
Name $valute -> ".Valute[$i]." -> Name<br/>
Value $valute -> ".Valute[$i]." -> Value<br/>
</pre>
";
?>
универсальный для чего? есть специальные средства для конкретной задачи, думаешь simplexml не годится для работы с xml?)
print в каждой строке кхм в чём же извращение?
20.
ramzes (14.05.2011 / 11:57)
19.
МегабиТ, автору предлогали, но его не устроило, он просил регуляркой.
For($i=0; $<37...
Тут вообще гибкостью не пахнет
______
извращение в том что ты принт в 6 раз чаще необходимого вызываешь
21.
Алексей (14.05.2011 / 12:30)
ramzes (14 Мая 2011 / 11:57)
19. МегабиТ, автору предлогали, но его не устроило, он просил регуляркой.
For($i=0; $<37...
Тут вообще гибкостью не пахнет
______
извращение в том что ты принт в 6 раз чаще необходимого вызываешь
print вызвать ето прямо ресурсо емкая часть?
For($i=0; $i<=37...
количество валют фиксированно.
если так уж и надо то есть substr_count для подсчета
22.
ramzes (14.05.2011 / 12:41)
21.
МегабиТ, это не то что емко, это не логично
23.
Алексей (14.05.2011 / 12:43)
ramzes (14 Мая 2011 / 12:41)
21. МегабиТ, это не то что емко, это не логично
не логично в чем?
24.
ramzes (14.05.2011 / 13:31)
23.
МегабиТ, пипец,
тем что вызов
37*6 = 222
это не вызов 37
И дело не в скорости, дело в ненужности подобного.
Ты спросил, я ответил, не более того.
в дальнейшем продолжении дисскусии не вижу смысла.
URL:
https://visavi.net/topics/21494