Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: domDocument, nodeValue очищает все html тэги
 
 автор: riskk   (21.01.2011 в 13:23)   письмо автору
 
 

Есть таблица

<table>
<tr>
  <td>
  <p><span>1111</span></p>
  </td>

  <td >
  <p><span><img width=58 height=42
  src="image001.gif"></span></p>
  </td>

 </tr>
</table>


которую надо парсить, для этого использую domDocument

$dom = new domDocument;
 $dom->loadHTMLFile('test.htm');
 $dom->preserveWhiteSpace = true;

 $tables = $dom->getElementsByTagName('table');
 $rows = $tables->item(0)->getElementsByTagName('tr');

 foreach ($rows as $row)
 {
     $cols = $row->getElementsByTagName('td');

     echo $cols->item(0)->nodeValue;
     echo $cols->item(1)->nodeValue;

 }


все бы хорошо, но пробелма в том что nodeValue вместо

<p><span><img width=58 height=42
  src="image001.gif"></span></p>


возвращает пустую строку, он почему-то очищает все html тэги. Как можно решить эту проблему? Просто текст возвращает нормально, а теги очищает.

  Ответить  
 
 автор: The Electronic Cat   (21.01.2011 в 19:25)   письмо автору
 
   для: riskk   (21.01.2011 в 13:23)
 

Как PHP мог бы понять, что Вам хочется именно эти теги считать уже контентом, а внешние - узлами дерева DOM? Он преобразует их так же, как table, tr, td.

Получить innerHTML можно, в общем случае,
- создав новый пустой объект DOMDocument,
- импортировав в него нужный узел с помощью метода importNode,
- преобразовав результат в строку с помощью метода saveHTML,
- удалив строковыми функциями лишние внешние теги.

(Как Вы понимаете, это шаги одного способа, а не четыре альтернативы).

Вообще же, возможно, в Вашем случае проще обойтись регулярками, или explode в цикле, или strpos / substr в цикле. Зависит от того, что еще есть в test.htm вообще и в ячейках в частности.

Если то, что вы привели, вполне иллюстрирует содержимое html-файла, то, вероятно, быстрее всего будет что-то вроде
<?php
$html 
file_get_contents('test.htm');
while(
strstr($html'<td>'))
{
    list(
$tmp$html) = explode('<td>'$html2);
    list(
$needle$html) = explode('</td>'$html2);
    echo 
$needle//В переменной $needle - содержимое очередной ячейки. Делаем с ним что-то.
}
?>

  Ответить  
 
 автор: riskk   (22.01.2011 в 12:57)   письмо автору
 
   для: The Electronic Cat   (21.01.2011 в 19:25)
 

подсказали решение,


  $dom->saveXML($cols->item(0));


возвращает значение ячейки полностью

  Ответить  
 
 автор: The Electronic Cat   (22.01.2011 в 18:26)   письмо автору
 
   для: riskk   (22.01.2011 в 12:57)
 

Серьезно? Не знал. Ну и славно )

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования