SIMPLE XML и PHP [help-me]

Статус
В этой теме нельзя размещать новые ответы.

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>
 
причина в синтаксисе имен переменных (должны быть без знака '-')
соотв. в 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>";
}
 
Также очень советую, когда не ясно как будет выглядеть ключ или переменная пользоваться var_dump или print_r - помогает, когда фетчишь сложный мускуль запрос или вот работаешь с таким хмл файлом - сразу все видно как и что называется
 
а вроде стандарт XML не запрещает в названиях нодов использовать минус.
 
да действительно, в именах xml-тегов частично допустима пунктуация, это и является ограничением в работе с объектами
т. обр. предпочтительнее сразу парсить в массив - xml2array(simplexml_load_file('book.xml'));
 
ещё вариант проходит
PHP:
$item->{'short-number'}
или изменить xml стереть тире и тогда парсить.
 
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>";
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху