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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Получить нужные значения их XML

Сообщения:  [1-10]   [11-12] 

 
 автор: Саня   (16.02.2010 в 17:20)   письмо автору
 
   для: Дмитрий Смаль   (16.02.2010 в 16:52)
 

Что-то вроде этого:
<?
$array 
= array();
$postage $e->xpath('//Service/Postage'); 
$svcdescription $e->xpath('//Service/SvcDescription'); 
foreach (
$postage as $k=>$v) {
  
$array[$k] = array("postage" => strval($v), "svc" => strval($svcdescription[$k]));
}
print_r($array);

  Ответить  
 
 автор: Дмитрий Смаль   (16.02.2010 в 17:19)   письмо автору
 
   для: Саня   (16.02.2010 в 17:12)
 

спасибо вам конечно, вы мне помогли

но разве нельзя было сразу написать
$e = new SimpleXMLElement($xml);
$element = $e->xpath('//Service');
echo '<table>';
foreach ($element as $k=>$v) echo '<tr><td>'.$v->attributes()->ID.'</td><td>'.$v->Postage.'</td><td>'.$v->SvcDescription.'</td></tr>';
echo '</table>';

  Ответить  
 
 автор: Саня   (16.02.2010 в 17:12)   письмо автору
 
   для: Дмитрий Смаль   (16.02.2010 в 16:52)
 

> всё таки как мне получить массив с нужными мне значениями?
Нужно делять явное преобразование типа: intval(), strval().

> вот так я получаю все значения, но как мне ID получить?
$element->attributes()->ID;

  Ответить  
 
 автор: Дмитрий Смаль   (16.02.2010 в 16:52)   письмо автору
 
   для: Саня   (16.02.2010 в 15:52)
 

Похоже это то что нужно
порылся в интеренте

всё таки как мне получить массив с нужными мне значениями?

типа
$servise=array(
    0=>array(id=>6,pounds=>3,ounces=>3),
    1=>array(id=>3,pounds=>4,ounces=>7),
)

я уже и так и эдак пробовал.. все равно влазит object(SimpleXMLElement) в массив

$postage = $e->xpath('//Service/Postage');
$svcdescription = $e->xpath('//Service/SvcDescription');
echo '<table>';
foreach ($postage as $k=>$v) echo '<td>'.$svcdescription[$k].'</td><td>'.$postage[$k].'</td></tr>';
echo '</table>';

вот так я получаю все значения, но как мне ID получить?

  Ответить  
 
 автор: Саня   (16.02.2010 в 15:57)   письмо автору
 
   для: Дмитрий Смаль   (16.02.2010 в 15:34)
 

У PHP 5 много удобных инструментов для работы с XML по сравнению с РНР 4.

  Ответить  
 
 автор: Саня   (16.02.2010 в 15:52)   письмо автору
 
   для: Дмитрий Смаль   (16.02.2010 в 14:11)
 

В вашем случае очень удобно использовать xpath:
<pre><?
$xml 
'<?xml version="1.0"?> 
<IntlRateResponse> 
    <Package ID="1ST"> 
        <Prohibitions>Radioactive materials.</Prohibitions> 
        <Service ID="6"> 
            <Pounds>3</Pounds> 
            <Ounces>3</Ounces> 
        </Service> 
        <Service ID="3"> 
            <Pounds>4</Pounds> 
            <Ounces>7</Ounces> 
        </Service> 
    </Package> 
</IntlRateResponse>'
;
$e = new SimpleXMLElement($xml);

print_r($e->xpath('//Service')); // все services
print_r($e->xpath('//Service[@ID="3"]')); // service с конкретным id

  Ответить  
 
 автор: Дмитрий Смаль   (16.02.2010 в 15:44)   письмо автору
 
   для: t3ma   (16.02.2010 в 14:33)
 

хотя использовать такой способ можно, вот только неудобно добавлять параметры
preg_match_all ("/<Service ID=\"([0-9]+)\">/", $xml, $service);
preg_match_all ("/<Postage>([0-9.]+)<\/Postage>/", $xml, $postage);

foreach ($service[1] as $k=>$v) {
    echo $service[1][$k].'-'.$postage[1][$k].'<br />';
}

  Ответить  
 
 автор: Дмитрий Смаль   (16.02.2010 в 15:37)   письмо автору
 
   для: t3ma   (16.02.2010 в 14:33)
 

спасибо, но смысл доставать значения по ID
значений таких может быть много как и ID, с регулярными выражениями будет не удобно работать.
пробовал использовать функцию simplexml_load_string($str) но нужного мне результата не получил

  Ответить  
 
 автор: Дмитрий Смаль   (16.02.2010 в 15:34)   письмо автору
 
   для: Саня   (16.02.2010 в 14:18)
 

5.2
а какие варианты для разных версий?

  Ответить  
 
 автор: t3ma   (16.02.2010 в 14:33)   письмо автору
 
   для: Дмитрий Смаль   (16.02.2010 в 14:11)
 

<?php

$text 
'<?xml version="1.0"?>
<IntlRateResponse>
    <Package ID="1ST">
        <Prohibitions>Radioactive materials.<Prohibitions>
        <Service ID="6">
            <Pounds>3</Pounds>
            <Ounces>3</Ounces>
        </Service>
        <Service ID="3">
            <Pounds>4</Pounds>
            <Ounces>7</Ounces>
        </Service>
    </Package>
</IntlRateResponse>'
;

preg_match_all ("/<Pounds>([0-9]+)<\/Pounds>/"$text$array);

echo 
"<pre>";
print_r($array[1]);
echo 
"</pre>";
?>

  Ответить  

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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