За последние 24 часа нас посетили 58977 программистов и 1771 робот. Сейчас ищут 880 программистов ...

парсинг xml (вопрос ламера :) )

Тема в разделе "PHP для новичков", создана пользователем Fuuuuu, 21 ноя 2011.

  1. Fuuuuu

    Fuuuuu Активный пользователь

    С нами с:
    20 ноя 2011
    Сообщения:
    24
    Симпатии:
    0
    Доброго дня суток. Прошу помощи нужно спарсить значения xml файла. Сам я написал кое что но проблема в том что не получается вывести значения из 2 цикла в общий запрос чтобы занести данные в базу. Тут для наглядности сделал вывод через echo. $x выводится нормально а вот с $y запара...
    PHP:
    1. '
    2. <list>
    3.     <a id="1" type="type1" name="name1">
    4.         <set val1="1val" />
    5.         <set val2="2val" />
    6.         <set val3="3val" />
    7.         <set val4="4val" />
    8.         <set val5="5val />
    9.     </a>
    10. </list>
    11. ');
    12. global $x;
    13. global $y;
    14. foreach ($xml->children() as $site)
    15. {
    16. $x = "'".$site[id]."', '".$site[type]."', '".$site[name]."'";
    17.  
    18. }
    19. foreach ($site->children() as $subsite)
    20. {
    21.     $y = $subsite[val1].$subsite[val12].$subsite[val13];
    22. }
    23. echo $x.$y;
    24. ?>
     
  2. Fuuuuu

    Fuuuuu Активный пользователь

    С нами с:
    20 ноя 2011
    Сообщения:
    24
    Симпатии:
    0
    up, помогите пожалуйсто
     
  3. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Может быть так?
    PHP:
    1. <?php
    2.  
    3. $string = <<<XML
    4. <?xml version='1.0'?>
    5. <list>
    6.     <a id="1" type="type1" name="name1">
    7.         <set val="1val" />
    8.         <set val="2val" />
    9.         <set val="3val" />
    10.         <set val="4val" />
    11.         <set val="5val" />
    12.     </a>
    13. </list>
    14. XML;
    15.  
    16. $xml = simplexml_load_string($string);
    17.  
    18. global $x;
    19. global $y;
    20. foreach ($xml->children() as $site)
    21. {
    22.     $x = "'".$site['id']."', '".$site['type']."', '".$site['name']."'";
    23.     foreach ($site->children() as $subsite)
    24.     {
    25.         $y = $subsite['val'];
    26.         echo "$x:$y <br />\n";
    27.     }
    28. }
    29.  
     
  4. Fuuuuu

    Fuuuuu Активный пользователь

    С нами с:
    20 ноя 2011
    Сообщения:
    24
    Симпатии:
    0
    Спасибо за старания. К сожалению имена менять нельзя т.к. нужна выборка по опр именнам т.е. нужно вывести к примеру val1 и val3. Вобще тело xmlки очень большое и там много записей которые идут попорядку с идшниками и данными. В вашем же примере в 2 цикле будет выводится немного не то что мне нужно.

    Вот пример, нужно данные из каждого контейнера сформировать в один запрос например (правильность запроса написал на память поэтому с ошибками но сути не меняет). Необходимо чтобы после цикла данные были в какой то переменной чтобы произвести запрос а потом обнулить переменную для последующего прохода цикла уже с другим идшником.

    INSERT INTO table (id,type,name,val1,val3,val4,val5) VALUES(`1`, `type1`, `name1`, `1val`, `3val, `4val`, `5val`)
    INSERT INTO table (id,type,name,val1,val3,val4,val5) VALUES(`2`, `type2`, `name2`, `1val`, `3val, `4val`, `5val`)
    INSERT INTO table (id,type,name,val1,val3,val4,val5) VALUES(`3`, `type3`, `name3`, `1val`, `3val, `4val`, `5val`)
    INSERT INTO table (id,type,name,val1,val3,val4,val5) VALUES(`4`, `type4`, `name4`, `1val`, `3val, `4val`, `5val`)
    PHP:
    1.  
    2.  <list>
    3.      <a id="1" type="type1" name="name1">
    4.          <set val1="1val" />
    5.          <set val2="2val" />
    6.          <set val3="3val" />
    7.          <set val4="4val" />
    8.          <set val5="5val />
    9.     </a>
    10.     <a id="2" type="type2" name="name2">
    11.         <set val1="1val" />
    12.         <set val2="2val" />
    13.         <set val3="3val" />
    14.         <set val4="4val" />
    15.         <set val5="5val />
    16.      </a>
    17.      <a id="3" type="type3" name="name3">
    18.          <set val1="1val" />
    19.          <set val2="2val" />
    20.          <set val3="3val" />
    21.          <set val4="4val" />
    22.          <set val5="5val />
    23.     </a>
    24.     <a id="4" type="type4" name="name4">
    25.         <set val1="1val" />
    26.         <set val2="2val" />
    27.         <set val3="3val" />
    28.         <set val4="4val" />
    29.         <set val5="5val />
    30.      </a>
    31.  </list>
    32.  
    Думаю так понятнее обьяснил :)
     
  5. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    PHP:
    1. <?php
    2.  
    3. $string = <<<XML
    4. <?xml version='1.0'?>
    5. <list>
    6.     <a id="1" type="type1" name="name1">
    7.         <set val1="1val" />
    8.         <set val2="2val" />
    9.         <set val3="3val" />
    10.         <set val4="4val" />
    11.         <set val5="5val" />
    12.     </a>
    13. </list>
    14. XML;
    15.  
    16. $xml = simplexml_load_string($string);
    17.  
    18. global $x;-
    19. global $y;-
    20. foreach ($xml->children() as $site)-
    21. {
    22.     $x = "'".$site['id']."', '".$site['type']."', '".$site['name']."'";
    23.     $y = array();
    24.     foreach ($site->children() as $subsite){
    25.         foreach ($subsite->attributes() as $key => $value){
    26.              $y[$key] = (string) $value;
    27.         }
    28.     }
    29.     $string = implode(', ', $y);
    30.     print_r($string);
    31. }
    32.  
     
  6. Fuuuuu

    Fuuuuu Активный пользователь

    С нами с:
    20 ноя 2011
    Сообщения:
    24
    Симпатии:
    0
    topas, Спасибо большое вроде всё так как надо!