Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обработка XML в PHP

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Андрей
Отправлено: 08 Октября, 2007 - 11:27:52
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Мой вопрос касается обработки XML файла
есть код
PHP:
скопировать код в буфер обмена
  1.  
  2. $doc = new DOMDocument;
  3. $doc->preserveWhiteSpace = false;
  4. $doc->loadXML("$out1");
  5. $xpath = new DOMXPath($doc);
  6.  
  7. $query = '//sponsor/rows/*';
  8. $entries = $xpath->query($query);
  9.  
  10. foreach ($entries as $entry) {
  11.         echo "<tr><td> {$entry->firstChild->nodeValue} </td>" .
  12.          " <td> {$entry->lastChild->nodeValue}</td></tr>";
  13.        
  14. }
  15.  


в результате выполнения получаю

PHP:
скопировать код в буфер обмена
  1.  
  2. <table>
  3. <tr><td>163001</td><td>0,6</td></tr>
  4. <tr><td>368362</td><td>0,12</td></tr>
  5. </table>
  6.  


это собственно первая и последняя колонки документа.
А как получить вторую, третью и тд. колонки не могу понять.
Подскажите кто сталкивался.
 
 Top
valenok Модератор
Отправлено: 08 Октября, 2007 - 23:44:41
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Похоже что у вас $entries это отдельные таблицы
И выводит скрипт именно то что вы заказывали
$entry->firstChild
$entry->lastChild

Для каждой таблицы (entry) нужно поставить цикл и выводить
не только первуцю и последнюю но и всё сразу.

Надеюсь вы поняли в чём порблема.
Если не удастся решить самим, обращайтесь за советом или с вопорсами.


-----
Truly yours, Sasha.
 
My status
 Top
Андрей
Отправлено: 09 Октября, 2007 - 07:45:06
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Видимо мне нужно было сразу указать структуру XML документа который обрабатываю.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?xml version="1.0" encoding="windows-1251"?>
  3. <sponsor>
  4. <rows cnt="20">
  5. <row id="1">
  6. <id_goods>163001</id_goods>
  7. <place>Магазин цифровых товаров</place>
  8. <server>http://www.адрес.сайта</server>
  9. <price>0,6</price>
  10. </row>
  11. <row id="2">
  12. <id_goods>368362</id_goods>
  13. <place>Букмекерская контора</place>
  14. <server>http://www.адрес.сайта</server>
  15. <price>0,12</price>
  16. </row>
  17. </rows>
  18. </sponsor>
  19.  


То что нужно два вложенных цикла сделать для разбора этого файла, я то понял сразу. Только оператора для вывода каждого поля отдельно не нашел. К сожалению с XML форматом работаю совсем мало. Решил использовать метод DOMXPATH. Но нашел только операторы для вывода первой и последней строки. Недовольство, огорчение
Пробовал использовать свойство nextChild но тогда выводится все поля в одну строку разделенные пробелом...
 
 Top
evgenijj
Отправлено: 09 Октября, 2007 - 16:28:06
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $xmlstr ='<?xml version="1.0" encoding="windows-1251"?>
  3.  <sponsor>
  4.  <rows cnt="20">
  5.  <row id="1">
  6.  <id_goods>163001</id_goods>
  7.  <place>Магазин цифровых товаров</place>
  8.  <server>http://www.адрес.сайта</server>
  9.  <price>0,6</price>
  10.  </row>
  11.  <row id="2">
  12.  <id_goods>368362</id_goods>
  13.  <place>Букмекерская контора</place>
  14.  <server>http://www.адрес.сайта</server>
  15.  <price>0,12</price>
  16.  </row>
  17.  </rows>
  18.  </sponsor>
  19.  ';
  20.  
  21.  $xml = simplexml_load_string($xmlstr);
  22.  echo '<pre>';
  23.  var_dump($xml);
  24.  echo '</pre>';
  25.  
  26.  echo '<table border="1">';
  27.  foreach ( $xml->rows->row as $row )  
  28.  {
  29.     echo '<tr>';
  30.     echo '<td>'.$row->id_goods.'</td><td>'.$row->place.'</td>';
  31.     echo '<td>'.$row->server.'</td><td>'.$row->price.'</td>';
  32.     echo '</tr>';      
  33.  }
  34.  echo '</table>';
  35.  


PHP:
скопировать код в буфер обмена
  1.  
  2. object(SimpleXMLElement)#1 (1) {
  3.  ["rows"]=>
  4.   object(SimpleXMLElement)#2 (2) {
  5.    ["@attributes"]=>
  6.     array(1) {
  7.       ["cnt"]=>
  8.       string(2) "20"
  9.     }
  10.     ["row"]=>
  11.     array(2) {
  12.       [0]=>
  13.       object(SimpleXMLElement)#3 (5) {
  14.        ["@attributes"]=>
  15.         array(1) {
  16.           ["id"]=>
  17.           string(1) "1"
  18.         }
  19.         ["id_goods"]=>
  20.         string(6) "163001"
  21.         ["place"]=>
  22.         string(46) "Магазин цифровых товаров"
  23.         ["server"]=>
  24.         string(32) "http://www.адрес.сайта"
  25.         ["price"]=>
  26.         string(3) "0,6"
  27.       }
  28.       [1]=>
  29.       object(SimpleXMLElement)#4 (5) {
  30.        ["@attributes"]=>
  31.         array(1) {
  32.           ["id"]=>
  33.           string(1) "2"
  34.         }
  35.         ["id_goods"]=>
  36.         string(6) "368362"
  37.         ["place"]=>
  38.         string(39) "Букмекерская контора"
  39.         ["server"]=>
  40.         string(32) "http://www.адрес.сайта"
  41.         ["price"]=>
  42.         string(4) "0,12"
  43.       }
  44.     }
  45.   }
  46. }
  47.  


PHP:
скопировать код в буфер обмена
  1.  
  2. 163001 | Магазин цифровых товаров | http://www.адрес.сайта | 0,6
  3. --------------------------------------------------------------------
  4. 368362 | Букмекерская контора     | http://www.адрес.сайта | 0,12
  5.  


http://webmasterschool[dot]ru/articles/article35.php
 
 Top
Андрей
Отправлено: 10 Октября, 2007 - 11:23:30
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Спасибо. Проверил. Все работает. Как говорят все гениальное просто.
Статья тоже помогла разобраться с вопросами которые возникли походу.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB