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? [2]

 PHP.SU

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


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

> Без описания
President
Отправлено: 30 Января, 2009 - 22:49:27
Post Id


Новичок


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


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




Итак переформулирую задачку:
Есть не очень удобный xml такого вида:
http://bullion[dot]ru/person[dot]xml
В нем есть данные для таблички.
Как мне его распарсить, чтобы получить на выходе html код?

Вот что сделано:
PHP:
скопировать код в буфер обмена
  1.  $dom = new DOMDocument();
  2. $dom->load($file);
  3. $xpath = new DOMXPath($dom);
  4. $arts = $xpath->query("/InfoPacket/InfoItem/Text");
  5. foreach($arts as $art) {
  6.     echo iconv("UTF-8","windows-1251", $art->nodeName . " - " . $art->nodeValue . "<br />");
  7. }


Теперь задачка как правильно распарсить узел <Text> в котором есть просто тексты, есть подузел <Data> и <Table>.
Причем эти подузлы могут быть где угодно в тексте, а может их и вовсе не быть.
Идея такая:
Задаю

затем нужно чтобы узел <Text> парсился сверху-вниз.
Когда парсинг доходит до узла <Table> (наверно проверку на блок как то надо сделать) - то нужно чтобы выполнилось

В блоке <Column> -
PHP:
скопировать код в буфер обмена
  1.  $text .= "<tr><td>ТЕКСТ><td>";

ну и так далее.
Подскажите пож-ста как правильно сделать перебор всех узлов, как их при этом проверять.
Спасибо!
 
 Top
Джур
Отправлено: 01 Февраля, 2009 - 00:00:21
Post Id



Посетитель


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


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




President пишет:
Не. Не работает.

На самом деле работает... Просто у вас в XML верблюды... Для верблюдов...
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $xml=simplexml_load_file('1.xml');
  3.  
  4. $echo .= '<h1>'.$xml->InfoItem->title.'</h1>';
  5. $echo .= '<h2>'.$xml->Time.'</h2>';
  6.  
  7. $echo .= '<p>'.$xml->InfoItem->Text[0].'</p>';
  8.  
  9. $echo .=  '<table border="1"><tr>';
  10. foreach($xml->InfoItem->Text[1]->Data->Table->Column as $v) $echo .=  '<th>'.$v.'</th>';
  11. $echo .=  '</tr>';
  12. foreach($xml->InfoItem->Text[1]->Data->Table->Row as $v){
  13.   $echo .=  '<tr><td>'.$v->Cell[0].'</td>';
  14.   $echo .=  '<td>'.$v->Cell[1].'</td>';
  15.   $echo .=  '<td>'.$v->Cell[2].'</td></tr>';
  16. }
  17. $echo .=  '</table>';
  18.  
  19. $echo .= '<p>'.$xml->InfoItem->Text[2].'</p>';
  20.  
  21. echo iconv('utf-8','cp1251',$echo);

Правильный перебор в цикле, куда уж проще.
Насчет проверки, неочень понял. Проверять как обычно
isset(), is_object(), is_array()


-----
Тамбовский каджит тебе товарищ
 
 Top
President
Отправлено: 01 Февраля, 2009 - 11:05:29
Post Id


Новичок


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


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




Спасибо, Джур!
Заработало!
Есть только нюанс.
Таблица может быть в любом месте текста, а текстов над таблицей может быть много.
Думаю сделать переборку по текст, с проверкой дочерних узлов.
Если это Data,
затем Если внутри Data есть Table: то вытаскиваю всю табличку....
В Data еще изображение может быть, но его не рассматриваю, с ним все проще.

+
есть там такое:
<Option type="int" name="MessageId">13188</Option>

Как сделать выборку по атрибуту MessageId?

(Отредактировано автором: 01 Февраля, 2009 - 13:03:33)

 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB