За последние 24 часа нас посетили 56840 программистов и 1790 роботов. Сейчас ищут 877 программистов ...

SimpleXML и доступ к значению

Тема в разделе "Прочие вопросы по PHP", создана пользователем maloicds, 30 апр 2015.

  1. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Добрый день!
    Есть некий xml документ, одно из значений я получаю так
    Код (Text):
    1.  
    2. $index =  $xml->AllData->TripInformation->StopSequence->StopPoint[1]->DisplayContent->LineInformation->LineName->Value;
    3. echo 'Route nuber '.$index.'<BR>';
    Как мне получить вот такое значение, которое покажу на нерабочем примере
    Код (Text):
    1.  
    2. $x=14;
    3. $index =  $xml->AllData->TripInformation->StopSequence->StopPoint[$x]->DisplayContent->LineInformation->LineName->Value;
    4. echo 'Route nuber '.$index.'<BR>';
    т.е StopPoint должно быть StopPoint[14]
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Покажи xml документ
     
  3. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Он очень большой
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Выложи на яндекс.диск или аналоги
     
  5. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Код (PHP):
    1. var_dump($xml->AllData->TripInformation->StopSequence->StopPoint[14]->DisplayContent->LineInformation->LineName->Value->__toString());
    у меня и твои два примера работают
     
  7. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    А через переменную?
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Через переменную тоже.
    PHP Version 5.6.7
     
  9. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Версия php 5.4.16 и пример с переменной не работает :(
     
  10. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Вот весь код. Что делаю не так
    Код (Text):
    1.  
    2. <?php
    3. $url='http://192.168.1.188:6001/services/ibis-ip/CustomerInformationService/GetAllData';
    4. $xml = simpleXML_load_file($url,"SimpleXMLElement",LIBXML_NOCDATA);
    5. $idx =  $xml->AllData->CurrentStopIndex->Value;
    6. $index =  $xml->AllData->TripInformation->StopSequence->StopPoint[$idx]->DisplayContent->LineInformation->LineName->Value;
    7. echo 'Current stops '.$index.'<BR>';
     
  11. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Вот скажи, зачем ты пишешь загадками?
    Проще покажи весь xml или кусок, так будет понятнее...
    Когда же вы научитесь уже составлять полноценные вопросы, а не я делаю, а не работает, что делаешь, где делаешь, не черта не понятно, сиди гадай! Кому оно надо?
     
  12. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Весь xml доступен по ссылке в дропе (несколько постов выше), код, который не работает тоже здесь
     
  13. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Эм, видимо я не доспал, окай... гляну...
     
  14. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Запустил под PHP Version 5.4.25, всё нормально
    Код (PHP):
    1. $xml = new SimpleXMLElement(file_get_contents('GetAllData.xml'));
    2. $x = 14;
    3. var_dump($xml->AllData->TripInformation->StopSequence->StopPoint[$x]->DisplayContent->LineInformation->LineName->Value->__toString()); 
    результат: string(2) "14"
     
  15. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    спасибо, так работает, а если я получаю
    Код (Text):
    1.  
    2. $x =  $xml->AllData->CurrentStopIndex->Value;
    (переменая $х в данном случае число) а потом подставляю в var_dump, то ругается
    Код (Text):
    1.  
    2. Notice: Trying to get property of non-object in C:\xampp\htdocs\ivu\get_data.php on line 48
    3. Notice: Trying to get property of non-object in C:\xampp\htdocs\ivu\get_data.php on line 48
    4. Notice: Trying to get property of non-object in C:\xampp\htdocs\ivu\get_data.php on line 48
    5. Notice: Trying to get property of non-object in C:\xampp\htdocs\ivu\get_data.php on line 48
    6. Fatal error: Call to a member function __toString() on a non-object in C:\xampp\htdocs\ivu\get_data.php on line 48
     
  16. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    а value строка? если нет, то убери __toString()
     
  17. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Чёт к вечеру совсем голова не варит :(
    Мне необходимо от значения
    Код (Text):
    1. $x =  $xml->AllData->CurrentStopIndex->Value;
    в другую переменную получить значение
    Код (Text):
    1. $xml->AllData->TripInformation->StopSequence->StopPoint[$x]->DisplayContent->LineInformation->LineName->Value
    я так понимаю придётся использовать var_export
     
  18. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    $x = $xml->AllData->CurrentStopIndex->Value->__toString();
     
  19. maloicds

    maloicds Новичок

    С нами с:
    30 апр 2015
    Сообщения:
    10
    Симпатии:
    0
    Оказалось всё намного проще: использовал приведение типов
    Код (Text):
    1. $idx =  (integer)$xml->AllData->CurrentStopIndex->Value;
    а потом
    Код (Text):
    1. $v = var_export($xml->AllData->TripInformation->StopSequence->StopPoint[$idx]->StopName->Value->__toString(), true);
    и всё заработало!
    Всем спасибо, вопрос закрыт!