Как правильно парсить XML?

Sunday

Cōgitō ergō sum
Регистрация
13 Дек 2009
Сообщения
823
Реакции
342
Пытаюсь распарсить Для просмотра ссылки Войди или Зарегистрируйся
На выходе нужно получить такое:

Код:
Группа 1
   элемент
   элемент
   элемент

Группа 2
   элемент
   элемент
   элемент

Группа 3
   элемент
   элемент
   элемент

Знаний не хватает, чтобы это сделать :dk:

Максимум, что я сделал это вот:
PHP:
$xml = simplexml_load_file("https://auth.robokassa.ru/Merchant/WebService/Service.asmx/GetCurrencies?MerchantLogin=demo&Language=ru");
 
  foreach ($xml->Groups->Group as $Group) {
   
    echo '<br><br>'.$Group['Description'];

    foreach ($xml->Groups->Group->Items->Currency as $Currency) {
   
      echo '<br>'.$Currency['Name'];
   
    }
   
  }
Но этот вариант работает только на половину.
 
если я правильно понял задумку то все в принципе правильно, только
ошибка во втором цикле - нужно перебирать не с корня а от текущей ноды.
то есть
Код:
$xml = simplexml_load_file("https://auth.robokassa.ru/Merchant/WebService/Service.asmx/GetCurrencies?MerchantLogin=demo&Language=ru");

foreach ($xml->Groups->Group as $Group) {
    echo '<br><br>' . $Group['Description'];
    foreach ($Group->Items->Currency as $Item) {
        echo '<br>  ' . $Item['Name'];
    }

}
 
Проверяй что находится в конкретном переборе var_dump($Group); тогда будет понятнее что выводить или делать еще один перебор массива.
 
Проверяй что находится в конкретном переборе var_dump($Group); тогда будет понятнее что выводить или делать еще один перебор массива.
Да я выводил через print_r, но что-то не срослось :confused: Для просмотра ссылки Войди или Зарегистрируйсявсё правильно подсказал.
Спасибо, всё ок. :)
По ходу еще вопрос - есть ли способ как-то исключить строку из вывода. Мне к примеру нужно не выводить одну группу. Т.е. как-то её пропустить. В голову приходит только скрыть её средствами HTML, но не хочется такой тупой способ использовать.
 
Последнее редактирование:
Да я выводил через print_r, но что-то не срослось :confused: Для просмотра ссылки Войди или Зарегистрируйсявсё правильно подсказал.

Спасибо, всё ок. :)
По ходу еще вопрос - есть ли способ как-то исключить строку из вывода. Мне к примеру нужно не выводить одну группу. Т.е. как-то её пропустить. В голову приходит только скрыть её средствами HTML, но не хочется такой тупой способ использовать.
Если строка в конкретном элементе массива, то удали его. Для просмотра ссылки Войди или Зарегистрируйся unset($arr[$element]);
 
По ходу еще вопрос - есть ли способ как-то исключить строку из вывода. Мне к примеру нужно не выводить одну группу. Т.е. как-то её пропустить. В голову приходит только скрыть её средствами HTML, но не хочется такой тупой способ использовать.

например проверять по списку групп, которые надо спрятать

PHP:
$xml = simplexml_load_file("https://auth.robokassa.ru/Merchant/WebService/Service.asmx/GetCurrencies?MerchantLogin=demo&Language=ru");

$hideGroups = array('EMoney', 'BankCard'); // список групп для исключения

foreach ($xml->Groups->Group as $Group) {
    if(!in_array($Group["Code"], $hideGroups)) { // если текущая группа не в списке исключений - выводим ее
        echo '<br><br>' . $Group['Description'];
        foreach ($Group->Items->Currency as $Item) {
            echo '<br>  ' . $Item['Name'];
        }
    }
}

таким же образом можно спрятать например способ платежа во всех группах

Код:
$hideCurrency = array('QiwiWallet');
...
if(!in_array($Item["Alias"], $hideCurrency)) echo '<br>  ' . $Item['Name'];
...
 
Назад
Сверху