За последние 24 часа нас посетили 37957 программистов и 1811 роботов. Сейчас ищут 825 программистов ...

Работа с xml , помогите изменить функцию

Тема в разделе "PHP для новичков", создана пользователем Artur_hopf, 9 июн 2018.

  1. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    Добрый день. Есть функция которая обрабатывает xml фаил, записывает его в массив и переводит в JSON формат. Нашел я ее на просторах интернета, она прекрасно работает, вот она:
    PHP:
    1. function xml2js($xmlnode) {
    2.     $root = (func_num_args() > 1 ? false : true);
    3.     $jsnode = array();
    4.  
    5.     if (!$root) {
    6.         if (count($xmlnode->attributes()) > 0){
    7.             $jsnode["$"] = array();
    8.             foreach($xmlnode->attributes() as $key => $value)
    9.                 $jsnode["$"][$key] = (string)$value;
    10.         }
    11.  
    12.         $textcontent = trim((string)$xmlnode);
    13.         if (count($textcontent) > 0)
    14.             $jsnode["_"] = $textcontent;
    15.  
    16.         foreach ($xmlnode->children() as $childxmlnode) {
    17.             $childname = $childxmlnode->getName();
    18.             if (!array_key_exists($childname, $jsnode))
    19.                 $jsnode[$childname] = array();
    20.             array_push($jsnode[$childname], xml2js($childxmlnode, true));
    21.         }
    22.         return $jsnode;
    23.     } else {
    24.         $nodename = $xmlnode->getName();
    25.         $jsnode[$nodename] = array();
    26.         array_push($jsnode[$nodename], xml2js($xmlnode, true));
    27.         return json_encode($jsnode);
    28.     }
    29. }
    30. $db = simplexml_load_file("file.xml");
    31. echo xml2js($db);
    Вопрос такой, как одновременно обработать например 2 xml файла с абсолютно одинаковой структурой, например такой:
    Код (Text):
    1. <?xml version="1.0" ?>
    2. <states>
    3.     <state>    
    4.         <name>Alabama</name>
    5.     </state>
    6.     <state>
    7.         <name>Alaska</name>
    8.     </state>
    9. </states>
    Как то так может можно сделать:
    PHP:
    1. function xml2js($xml1, $xml2)  {
    2.    //обрабатываем
    3. }
    4. $db = simplexml_load_file("file1.xml");
    5. $db2 = simplexml_load_file("file2.xml");
    6.  
    7. echo xml2js($db, $db2);
    Может кто сталкивался?
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  3. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @nospiou

    Я это принимаю так:
    Код (Javascript):
    1. $.ajax({
    2.         type: 'ajax',
    3.         url: url,
    4.         dataType: 'json',
    5.         success: function(data){
    6.             console.log(data);
    7.         }
    8.     });
    Поэтому 2 echo не работает =(
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    PHP:
    1. return json_encode($jsnode); замени на return $jsnode;
    2. $res['xml1'] = xml2js($db);
    3. $res['xml2'] = xml2js($db2);
    4. echo json_encode($res);
     
  5. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @nospiou
    Спасибо большое, все получилось.

    Смеха ради как я решил проблему говнокодом:

    в php
    PHP:
    1. if(@$_POST['num'] == 1)
    2. {
    3.    echo xml2js($db);
    4. }
    5. else if(@$_POST['num'] == 2)
    6. {
    7.     echo xml2js($db2);
    8. }
    9. else if(@$_POST['num'] == 3)
    10. {
    11.     echo xml2js($db3);
    12. }
    Отправлял запрос так:
    Код (Javascript):
    1. $.post("p.php", { num: "1"})
    2.     .done(function(data) {
    3.         data = JSON.parse(data);
    4.         array[0]= data
    5.     });
    6.  
    7.     $.post("p.php", { num: "2"})
    8.     .done(function(data) {
    9.         data = JSON.parse(data);
    10.         array[1] = data;
    11.     });
    12.  
    13.     $.post("p.php", { num: "3"})
    14.     .done(function(data) {
    15.         data = JSON.parse(data);
    16.         array[2] = data;
    17.     });
     
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  7. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @nospiou
    Я ваш вариант в итоге использовал, просто пока ответа не было, сам наговнокодил решение =)
     
  8. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510