[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как обработать строку?
ivanishin
Подскажите на примере, какими средствами лучше обработать строку? Выделенное жирным как раз и есть то, что нужно доставать из нее:

<getpos><returncode>200</returncode><country><code>UA</code><name>Ukraine</name></country><region><code>07</code><name>Kharkivs'ka Oblast'</name></region><city>Kharkov</city><position><longitude>36,25</longitude><latitude>50</latitude></position></getpos>


Обработать так, чтобы в отдельные переменные занеслись значения, например:
$returncode = 200
$country_code = UA
$country_name = Ukraine
$region_code = 07
$region_name = Kharkivs'ka Oblast'
$position_longitude = 36,25
$position_latitude = 50

Возможно пригодятся регулярные выражения?
Заранее спасибо за помощь.



Спустя 20 минут, 17 секунд (30.05.2009 - 16:08) Kuliev написал(а):
ivanishin
Не совсем понял судь вопроса, но посмотри в сторону ассоциативного массива.

Спустя 9 минут, 32 секунды (30.05.2009 - 16:18) ivanishin написал(а):
Kuliev,
получается, что у меня в переменную $var заноситься строка. Из этой строки необходимо достать значения и записать их в отдельные переменные.
Я думал, что необходимо как-то с регулярными выражениями поиграть. Достать то, что находиться между тегами <code>UA</code> и записать в переменную $country_code.
Если бы я больше знал пхп, то уже давно решил бы вопрос, ведь это очень легко.
Прошу о помощи.

Спустя 4 минуты, 15 секунд (30.05.2009 - 16:22) Kuliev написал(а):
ivanishin
Начнем с того, откуда ты берешь данные (ФОРМА, БД и т.д.)

Спустя 5 минут, 9 секунд (30.05.2009 - 16:27) ivanishin написал(а):
Kuliev,
данные получаю с помощь CURL. Отправляю CURLом POST данные, он возвращает ответ в переменную:

PHP
$var curl_exec($ch);

Спустя 1 минута, 54 секунды (30.05.2009 - 16:29) ivanishin написал(а):
В переменной $var теперь находиться упомянутая строка, которую мне необходимо обработать..

Спустя 4 часа, 33 минуты, 51 секунда (30.05.2009 - 21:03) kirik написал(а):
Так как это данные ввиде xml, то и разбирать их нужно как xml.

Спустя 2 минуты, 6 секунд (30.05.2009 - 21:05) waldicom написал(а):
В дополнение к предыдущему ответу: я бы посоветовал SimpleXML

Спустя 1 день, 13 часов, 7 минут, 22 секунды (1.06.2009 - 10:12) glock18 написал(а):
Цитата
Код
<getpos><returncode>200</returncode><country><code>UA</code><name>Ukraine</name></country><region><code>07</code><name>Kharkivs'ka Oblast'</name></region><city>Kharkov</city><position><longitude>36,25</longitude><latitude>50</latitude></position></getpos>


Обработать так, чтобы в отдельные переменные занеслись значения, например:
PHP
$returncode 200
$country_code 
UA
$country_name 
Ukraine
$region_code 
07
$region_name 
Kharkivs'ka Oblast'
$position_longitude 36,25
$position_latitude 


Ах красота! Так и вижу уже как это можно изящно распарсить регулярными выражениями. Хотя лучше обработай как xml.

Вот с регэкспом:

PHP
<?php
    $pattern 
'/<([^\/>]+)>(<([^\/>]+)>)?([^<]+)<\/[^>]+>(<\/[^>]+>)?/';
    
$subject "<getpos><returncode>200</returncode><country><code>UA</code><name>Ukraine</name></country><region><code>07</code><name>Kharkivs'ka Oblast'</name></region><city>Kharkov</city><position><longitude>36,25</longitude><latitude>50</latitude></position></getpos>";
    echo 
htmlentities($subject) . '<br />';
    
preg_match_all($pattern$subject$matchesPREG_SET_ORDER1);
    
$values = array();
    
$parentNode '';
    foreach(
$matches as $match)
    {
        if (!empty(
$match[3]))
        {
            
$parentNode $match[1];
            
$node $match[3];
        }
        else
            
$node $match[1];

        
$values[$parentNode $parentNode '_' $node $node] = $match[4]; // это для ассоциативного массива
        
${$parentNode $parentNode '_' $node $node} = $match[4]; // это для отдельных переменных
        
        
if (!empty($match[5]))
            
$parentNode '';
    }
    
print_r($values); // вывод массива
    
echo $returncode// вывод пары переменных. их имена соответствуют индексам массива.
    
echo $country_code// имена будут точно такие, как ты привел в своем сообщении.


Главное чтобы смысл понятен был (хотя должно работать - проверил). Лучше сделать по типу этого, но с xml.

Спустя 10 часов, 58 минут, 14 секунд (1.06.2009 - 21:11) kirik написал(а):
Цитата (glock18 @ 1.06.2009 - 02:12)
Так и вижу уже как это можно изящно распарсить регулярными выражениями.

biggrin.gif

Спустя 20 часов, 13 минут, 51 секунда (2.06.2009 - 17:24) ivanishin написал(а):
glock18
Вот то, о чем я интересовался. Все предельно понятно и вопросов не возникает. спасибо за потраченное время. Вопрос решен =)

Спустя 42 минуты, 31 секунда (2.06.2009 - 18:07) ivanishin написал(а):
glock18
как измениться код если добавить к $subject

PHP
$subject = "<getpos><returncode>200</returncode><country><code>UA</code><name>Ukraine</name></country><region><code>07</code><name>Kharkivs'ka Oblast'</name></region><city>Kharkov</city><position><longitude>36,25</longitude><latitude>50</latitude></position></getpos>";


это

PHP
$subject = '<?xml version="1.0" encoding="utf-8"?> <string xmlns="http://services.getpos.ua/"><getpos><returncode>200</returncode><country><code>UA</code><name>Ukraine</name></country><region><code>07</code><name>Kharkivska Oblast</name></region><city>Kharkov</city><position><longitude>36,25</longitude><latitude>50</latitude></position></getpos></string>';

Спустя 13 часов, 1 минута, 25 секунд (3.06.2009 - 07:08) glock18 написал(а):
Ну я бы лучше strpos'ом выдирал нужную строку. Скажем, искал бы getpos и брал бы только то, что после нее.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.