Разбор XML с добавлением значений тегов с помощью PHP

#php #xml

#php #xml

Вопрос:

Я использую некоторый API, который возвращает список транзакций, выполненных пользователем в формате XML. Вот как это выглядит.

 <Response>
<Status>00</Status>
<STMT>
   <T0>
      <ID>25624</ID>
      <DATE>30 JUNE 2014</DATE>
       <Amount>1500</Amount>
   </T0>
   <T1>
      <ID>11495</ID>
      <DATE>29 JUNE 2014</DATE>
       <Amount>1000</Amount>
   </T1>
   <T2>
      ----
      ----
      ---- 
</STMT>
<Bal>55</Bal>
</Response>
  

Теперь, как мы получаем эти значения внутри STMT тегов? Я пробовал это, но не сработало.

 $result=simplexml_load_string($xmlstring);
$i='0';
$tx ='T'.$i;
while ($result->STMT->$tx) {
    $result->STMT->$tx->ID;
    $tx='T'.strval(intval($i  ));
}
  

Пожалуйста, помогите.

Комментарии:

1. «но не сработало» не квалифицируется как конкретный вопрос. Вам нужно, по крайней мере, более четко указать, что не сработало. Что вы ожидали, что произойдет? Что произошло вместо этого? Вы получаете какие-либо ошибки? и т.д. п. П. (Просто пишу это, потому что ваш код выглядит не так уж далеко, я бы предположил, что это действительно работает)

Ответ №1:

На самом деле это просто. Сделайте что-то вроде этого:

 $xml_string = '<Response><Status>00</Status><STMT> <T0> <ID>25624</ID> <DATE>30 JUNE 2014</DATE> <Amount>1500</Amount> </T0> <T1> <ID>11495</ID> <DATE>29 JUNE 2014</DATE> <Amount>1000</Amount> </T1> <T2> <ID>11496</ID> <DATE>28 JUNE 2014</DATE> <Amount>500</Amount> </T2></STMT><Bal>55</Bal></Response>';
$xml = simplexml_load_string($xml_string);
$stmt = $xml->STMT;
$stmt = json_decode(json_encode($stmt), true);
echo '<pre>';
print_r($stmt);
  

Вывод:

 Array
(
    [T0] => Array
        (
            [ID] => 25624
            [DATE] => 30 JUNE 2014
            [Amount] => 1500
        )

    [T1] => Array
        (
            [ID] => 11495
            [DATE] => 29 JUNE 2014
            [Amount] => 1000
        )

    [T2] => Array
        (
            [ID] => 11496
            [DATE] => 28 JUNE 2014
            [Amount] => 500
        )

)
  

Комментарии:

1. Отличная идея! Большое вам спасибо.

Ответ №2:

Это работает. Вы не повторили результат…

 echo $result->STMT->$tx->ID . "n";
  

Кроме того, $i следует изменить на $i .