За последние 24 часа нас посетили 17527 программистов и 1717 роботов. Сейчас ищут 1011 программистов ...

SimpleXML выбирает только первые не уникальные элементы

Тема в разделе "PHP для новичков", создана пользователем inkindly, 17 авг 2014.

  1. inkindly

    inkindly Новичок

    С нами с:
    17 авг 2014
    Сообщения:
    4
    Симпатии:
    0
    Прошу помощи профессионалов.

    Есть код дампа реестра запрещенных ресурсов

    Код (Text):
    1.  
    2. #!/usr/local/bin/php
    3. <?php
    4. $xmlstr = <<<XML
    5. <?xml version="1.0" encoding="windows-1251"?>
    6. <reg:register updateTime="2014-02-02T12:00:00+04:00" updateTimeUrgently="2014-02-01T11:00:00"
    7. formatVersion="2.0" xmlns:reg="http://rsoc.ru" xmlns:tns="http://rsoc.ru">
    8. <content id="1101" includeTime="2013-12-01T10:00:05" entryType="1">
    9. <decision date="2013-12-01" number="9" org="Роспотребнадзор"/>
    10. <url><![CDATA[http://site1.com/index.php]]></url>
    11. <domain><![CDATA[site1.com]]></domain>
    12. <ip>1.1.1.1</ip>
    13. </content>
    14. <content id="1202" includeTime="2013-12-01T10:00:05" entryType="2">
    15. <decision date="2013-12-01" number="9" org="Мосгорсуд"/>
    16. <url><![CDATA[http://site2.com/page1.php]]></url>
    17. <url><![CDATA[http://site2.com/page2.php]]></url>
    18. <url><![CDATA[http://site2.com/page3.php]]></url>
    19. <domain><![CDATA[site2.com]]></domain>
    20. <ip>1.1.1.1</ip>
    21. <ip>1.1.1.2</ip>
    22. </content>
    23. <content id="1303" includeTime="2014-02-01T15:17:51" urgencyType="1" entryType="3">
    24. <decision date="2014-02-01" number="номер документа" org="Генпрокуратура"/>
    25. <url><![CDATA[http://site3.com/page1.html]]></url>
    26. <domain><![CDATA[site3.com]]></domain>
    27. <ips><ip>1.2.3.4</ip></ips>
    28. </content>
    29. <content id="1404" includeTime="2014-02-01T16:19:32" entryType="4">
    30. <decision date="2014-02-01" number="номер документа" org="Роскомнадзор"/>
    31. <domain><![CDATA[site4.com]]></domain>
    32. <domain><![CDATA[site5.com]]></domain>
    33. <ip>1.2.3.4</ip>
    34. <ipSubnet>8.1.1.0/24</ipSubnet>
    35. </content>
    36. <content id="1505" includeTime="2014-02-01T17:08:23" entryType="4">
    37. <decision date="2014-02-01" number="номер документа" org="Роскомнадзор"/>
    38. <ipSubnet>8.2.1.0/16</ipSubnet>
    39. </content>
    40. </reg:register>
    41. XML;
    42.  
    43.  
    44. $rsz = new SimpleXMLElement($xmlstr);
    45.  
    46. foreach ($rsz->content as $site) {
    47.    echo $site->ip, '  ip  ', PHP_EOL;
    48. }
    ответ выводит такой

    Код (Text):
    1.  
    2. 1.1.1.1  ip1
    3. 1.1.1.1  ip1
    4. 1.2.3.4  ip1
    5. 1.2.3.4  ip1
    6.   ip1
    Последние строки добавлял как тут
    http://php.ru/manual/simplexml.examples-basic.html

    Версия РНР 5.3.8

    как сделать так, чтобы выводились все ip ?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    $rsz = new SimpleXMLElement($xmlstr);
    var_dump($rsz);

    И гляди, какая структура у объекта после прочтения. Будет понятно, как по ней гулять.
     
  3. inkindly

    inkindly Новичок

    С нами с:
    17 авг 2014
    Сообщения:
    4
    Симпатии:
    0
    На интересующей записи выдает такое

    Код (Text):
    1. ["ip"]=>
    2.       array(2) {
    3.         [0]=>
    4.         string(7) "1.1.1.1"
    5.         [1]=>
    6.         string(7) "1.1.1.2"
    7.       }
    если обратиться по ip[0] или ip[1], то он возьмет эти значения. Но количество ай-пи может достигать до 17 шт. Как их все перебрать внутри

    Код (Text):
    1. foreach ($rsz->content as $site) {
    2.    echo $site->ip, '  ip  ', PHP_EOL;
    3. }
    , не зная, сколько их будет?
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Код (Text):
    1. foreach ($rsz->content as $site) {
    2.     foreach ($site->ip as $ip) {
    3.         echo $ip;;
    4.     }
    5. }
    Должно показать все айпишники в массиве.
     
  5. inkindly

    inkindly Новичок

    С нами с:
    17 авг 2014
    Сообщения:
    4
    Симпатии:
    0
    спасибо огромное! Заработало. ) будем дальше парсить.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да, там две точки с запятой, это я очепятался. Одну можно выпилить, там столько не нужно :)
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Мне вдруг показалось что это два глазика и клыки. И родился такой вот паучок.

    }(;;){