|
|
|
|
|
для: Дмитрий Смаль
(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: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 в 16:52)
| | > всё таки как мне получить массив с нужными мне значениями?
Нужно делять явное преобразование типа: intval(), strval().
> вот так я получаю все значения, но как мне ID получить?
$element->attributes()->ID; | |
|
|
|
|
|
|
|
для: Саня
(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:34)
| | У PHP 5 много удобных инструментов для работы с XML по сравнению с РНР 4. | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(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
|
| |
|
|
|
|
|
|
|
для: 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 />';
}
|
| |
|
|
|
|
|
|
|
для: t3ma
(16.02.2010 в 14:33)
| | спасибо, но смысл доставать значения по ID
значений таких может быть много как и ID, с регулярными выражениями будет не удобно работать.
пробовал использовать функцию simplexml_load_string($str) но нужного мне результата не получил | |
|
|
|
|
|
|
|
для: Саня
(16.02.2010 в 14:18)
| | 5.2
а какие варианты для разных версий? | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(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>";
?>
|
| |
|
|
|
|