|
|
|
| Здравствуйте, есть у меня строчка приверно вот такая:
<NumCode>036</NumCode><CharCode>AUD</CharCode><Nominal>1</Nominal><Name>������������� ������</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 );
?>
|
Может кто подскажет более элегантное решение этой задачи? | |
|
|
|
|
|
|
|
для: namo
(19.07.2009 в 21:39)
| | xml_parse()
simple_xml | |
|
|
|
|
|
|
|
для: Trianon
(19.07.2009 в 22:44)
| | нет, не вариант, попробовал, в случае если xml не валидный, вываливает fatalerror ... лучше уж регуляркой пройтись ... | |
|
|
|
|
|
|
|
для: namo
(20.07.2009 в 00:55)
| | в случае если XML невалидный - его полезно послать.
Зачем же иметь дело с невалидными XML? | |
|
|
|
|
|
|
|
для: Trianon
(20.07.2009 в 00:58)
| | Это парсер, работает в кроне, обрабатывает 10 сайтов, иногда данные могут прийти не совсем полные, в силу разных причин, перегрузки на канале, обрывом соединения или же 500 ... да что угодно, поэтому и переписал все на регулярки, а так как я их не очень хорошо знаю, вот и задаю вопросы знающим людям, глядишь научусь чемунибуть) | |
|
|
|
|
|
|
|
для: 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 последующим перебором массива
или я неправильно понял фразу
> положение тегов может меняться, | |
|
|
|
|
|
|
|
для: -.-
(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 :)
такой вариант действительно не шибко красивый, но тоже интересный) спасибо за вариант. | |
|
|
|