Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Парсинг блока xml в один запрос ?
 
 автор: namo   (19.07.2009 в 21:39)   письмо автору
 
 

Здравствуйте, есть у меня строчка приверно вот такая:

<NumCode>036</NumCode><CharCode>AUD</CharCode><Nominal>1</Nominal><Name>&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;&#65533;&#65533;</Name><Value>25,4301</Value>


положение тегов может меняться, к сожалению так и не разобрался как вытащить нужные данные в один запрос, использую 3, вот таких:


<?php
preg_match
('/<CharCode>(.*)<\/CharCode>/U'$arr[1][$i], $_code );
preg_match('/<Value>(.*)<\/Value>/U'$arr[1][$i], $_rate );
preg_match('/<Nominal>(.*)<\/Nominal>/U'$arr[1][$i], $_nominal );
?>


Может кто подскажет более элегантное решение этой задачи?

  Ответить  
 
 автор: Trianon   (19.07.2009 в 22:44)   письмо автору
 
   для: namo   (19.07.2009 в 21:39)
 

xml_parse()
simple_xml

  Ответить  
 
 автор: namo   (20.07.2009 в 00:55)   письмо автору
 
   для: Trianon   (19.07.2009 в 22:44)
 

нет, не вариант, попробовал, в случае если xml не валидный, вываливает fatalerror ... лучше уж регуляркой пройтись ...

  Ответить  
 
 автор: Trianon   (20.07.2009 в 00:58)   письмо автору
 
   для: namo   (20.07.2009 в 00:55)
 

в случае если XML невалидный - его полезно послать.
Зачем же иметь дело с невалидными XML?

  Ответить  
 
 автор: namo   (20.07.2009 в 01:02)   письмо автору
 
   для: Trianon   (20.07.2009 в 00:58)
 

Это парсер, работает в кроне, обрабатывает 10 сайтов, иногда данные могут прийти не совсем полные, в силу разных причин, перегрузки на канале, обрывом соединения или же 500 ... да что угодно, поэтому и переписал все на регулярки, а так как я их не очень хорошо знаю, вот и задаю вопросы знающим людям, глядишь научусь чемунибуть)

  Ответить  
 
 автор: Trianon   (20.07.2009 в 01:14)   письмо автору
 
   для: namo   (20.07.2009 в 01:02)
 

Знаете, что бывает при попытке интерпретировать частично принятое сообщение типа
Казнить нельзя помиловать!

?

  Ответить  
 
 автор: -.-   (19.07.2009 в 23:34)
 
   для: namo   (19.07.2009 в 21:39)
 

с тремя peg_match даже посимпатичнее будет чем например p_r_callback() сможет сдбелать что-то более-менее упорядоченное
<?
$txt 
='<NumCode>036</NumCode><CharCode>AUD</CharCode><Nominal>1</Nominal><Name>..................</Name><Value>25,4301</Value>
<Name>..................</Name><NumCode>036</NumCode><Value>25,4301</Value><CharCode>AUD</CharCode><Nominal>1</Nominal>
'
;
$out=array();

function 
zxsort($m){
global 
$out;
static 
$i 0;
if (isset(
$out[$i][$m[1]])) $i++;
$out[$i][$m[1]] = $m[2];
return 
'';
}
$reg '#<([CVN](?![uo])[^>]+)>([^<]+)</\1>#';

preg_replace_callback($reg'zxsort'$txt);
print_r($out);

или preg_match_all() одним выражением c последующим перебором массива


или я неправильно понял фразу
> положение тегов может меняться,

  Ответить  
 
 автор: namo   (20.07.2009 в 00:58)   письмо автору
 
   для: -.-   (19.07.2009 в 23:34)
 

имелось ввиду что теги могут меняться в таком порядке:


<NumCode>036</NumCode><CharCode>AUD</CharCode><Nominal>1</Nominal><Name>...</Name><Value>25,4301</Value> 

<Value>25,4301</Value><NumCode>036</NumCode><CharCode>AUD</CharCode><Nominal>1</Nominal><Name>...</Name>

<Name>...</Name><Value>25,4301</Value><NumCode>036</NumCode><CharCode>AUD</CharCode><Nominal>1</Nominal>


а строка всегда одна, берется из предыдущей регулярки preg_match_all :)

такой вариант действительно не шибко красивый, но тоже интересный) спасибо за вариант.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования