SIMPLE XML и PHP [help-me]

Тема в разделе "PHP", создана пользователем SysteMorgan, 21 сен 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. SysteMorgan

    SysteMorgan Постоялец

    Регистр.:
    23 май 2009
    Сообщения:
    51
    Симпатии:
    18
    Привет Всем ! Проблема в xml парсере

    не хочет парсеровать transaction-id или region-id
    ну которые с тире . Где ошибка ? просто 0 выдает

    PHP:
    <?php // Load and parse the XML document 
    $messages =  simplexml_load_file('book.xml');
     
    ?>
    <html xml:lang="en" lang="en">
    <body> 
    <?php
    // Здесь мы поместим цикл, чтобы включить заголовок элемента и описание
    foreach ($messages->message as $item) {
      echo 
    "<p>"$item->time"</p>";
      echo 
    "<p>"$item->transaction-id."</p>";
      echo 
    "<p>"$item->text"</p>";
      echo 
    "<p>"$item->keyword"</p>";
      echo 
    "<p>"$item->provider"</p>";
      echo 
    "<p>"$item->short-number"</p>";
      echo 
    "<p>"$item->phone"</p>";
      echo 
    "<p>"$item->money"</p>";
      echo 
    "<p>"$item->region-id"</p>";
    }
    ?>

    </body>
    </html>


    Вот xml код
    HTML:
    <?xml version="1.0" encoding="UTF-8"?>
    <messages>
    <message>
    <transaction-id>768765324</transaction-id>
    <time>19-11-2004 12:34:34.123</time>
    <keyword>KEYWORD</keyword>
    <provider>bee</provider>
    <short-number>8881</short-number>
    <phone>79161234567</phone>
    <text>PRIVET VSEM!</text>
    <money>1.36</money>
    <region-id>1</region-id>
    </message>
    </messages>
     
  2. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    причина в синтаксисе имен переменных (должны быть без знака '-')
    соотв. в xml файле должно быть напр.
    Код:
    <region_id>1</region_id>
    и в обработчике
    PHP:
    echo "<p>"$item->region_id"</p>";
    или вариант 2, через массив
    PHP:
    foreach ($messages->message as $item) {
      
    $item = (array)$item;
      echo 
    "<p>"$item['time']. "</p>";
      echo 
    "<p>"$item['transaction-id']."</p>";
      echo 
    "<p>"$item['text']. "</p>"
      echo 
    "<p>"$item['keyword']. "</p>"
      echo 
    "<p>"$item['provider']. "</p>"
      echo 
    "<p>"$item['short-number']. "</p>"
      echo 
    "<p>"$item['phone']. "</p>"
      echo 
    "<p>"$item['money']. "</p>"
      echo 
    "<p>"$item['region-id']. "</p>";
    }
     
  3. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    Также очень советую, когда не ясно как будет выглядеть ключ или переменная пользоваться var_dump или print_r - помогает, когда фетчишь сложный мускуль запрос или вот работаешь с таким хмл файлом - сразу все видно как и что называется
     
  4. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    а вроде стандарт XML не запрещает в названиях нодов использовать минус.
     
  5. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    да действительно, в именах xml-тегов частично допустима пунктуация, это и является ограничением в работе с объектами
    т. обр. предпочтительнее сразу парсить в массив - xml2array(simplexml_load_file('book.xml'));
    http://php.net/manual/en/book.simplexml.php
     
  6. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    ещё вариант проходит
    PHP:
    $item->{'short-number'}
    или изменить xml стереть тире и тогда парсить.
     
  7. Jeckerson

    Jeckerson Постоялец

    Регистр.:
    26 июл 2009
    Сообщения:
    56
    Симпатии:
    6
    PHP:
      echo "<p>". (string)$item->short-number"</p>";
      echo 
    "<p>". (string)$item->phone"</p>";
      echo 
    "<p>". (string)$item->money"</p>";
      echo 
    "<p>". (string)$item->region-id"</p>"
     
Статус темы:
Закрыта.