Преобразование вывода HTML в другую структуру с помощью PHP DOM

У меня есть простой HTML-файл, из которого мне нужно прочитать некоторые значения и изменить структуру вывода HTML-почты. Я довольно новичок в написании скриптов / PHP / навигации по DOM, так что извините, если это простой вопрос.

Ниже начальный вывод:

<table id="Table_01" width="600" height="547" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2">
<img src="header.jpg" width="600" height="295" border="0" alt="Alt Text 1"></td>
</tr>
<tr>
<td>
<a href="http://url.com/1">
<img src="leftcell_link1.jpg" width="300" height="163" border="0" alt="Alt Text Left"></a></td>
<td>
<a href="http://url.com/2">
<img src="rightcell_link2.jpg" width="300" height="163" border="0" alt="Alt Text Right"></a></td>
</tr>
<tr>
<td colspan="2">
<a href="http://url.com/3">
<img src="body_link3.jpg" width="600" height="89" border="0" alt="Body Alt"></a></td>
</tr>
</table>

Вот желаемый результат:

<table id="Table_01" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2" width="100%">
<img src="header.jpg" border="0" alt="Alt Text 1"></td>
</tr>
<tr>
<td width="50%">
<a href="http://url.com/1" name="link1">
<img src="leftcell_link1.jpg" border="0" alt="Alt Text Left" name="link1"></a></td>
<td width="50%">
<a href="http://url.com/2" name="link2">
<img src="rightcell_link2.jpg" border="0" alt="Alt Text Right" name="link2"></a></td>
</tr>
<tr>
<td colspan="2" width="100%">
<a href="http://url.com/3" name="link3">
<img src="body_link3.jpg" border="0" alt="Body Alt" name="link3"></a></td>
</tr>
</table>

Некоторые примечания

  • Структура входного файла не всегда будет одинаковой.
  • Ширина «td», основанная на проценте от атрибута ширины дочернего (или внукового) узла «img», по сравнению с общей шириной электронной почты (в данном случае 600px).
  • Прикрепление пользовательского атрибута «name» к тегам «a» и «img» на основе подстроки атрибута image «src».

Буду ли я лучше деконструировать всю вещь в массив необходимых атрибутов элемента, а затем восстановить его в правильном формате? Или было бы проще перебрать DOM и найти нужные мне атрибуты, затем применить их к родителям и удалить ненужные атрибуты, где это необходимо?

И есть ли способ обработать все это рекурсивно, чтобы мне не понадобилось несколько уровней проверок, основанных на том, находится ли он на уровне «td», «a» или «img»?

0

Решение

Вы можете изменить то, что вы хотите с классом DOMDocument.

<?php

$doc = new DOMDocument();
$doc->loadHTML('<table id="Table_01" width="600" height="547" border="0" cellpadding="0" cellspacing="0"> <tr> <td colspan="2"> <img src="header.jpg" width="600" height="295" border="0" alt="Alt Text 1"></td> </tr> <tr> <td> <a href="http://url.com/1"> <img src="leftcell_link1.jpg" width="300" height="163" border="0" alt="Alt Text Left"></a></td> <td> <a href="http://url.com/2"> <img src="rightcell_link2.jpg" width="300" height="163" border="0" alt="Alt Text Right"></a></td> </tr> <tr> <td colspan="2"> <a href="http://url.com/3"> <img src="body_link3.jpg" width="600" height="89" border="0" alt="Body Alt"></a></td> </tr> </table>');

$tds = $doc->getElementsByTagName('td');

$tds[0]->setAttribute('width', '100%');
$tds[1]->setAttribute('width', '50%');
$tds[2]->setAttribute('width', '100%');

var_dump($doc->saveHTML());

?>

результат:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
...
<td colspan="2" width="100%">
...
<td width="50%">
...
<td width="100%">
...
</html>

Пожалуйста, прочтите документацию по этим функциям:
http://php.net/manual/en/class.domdocument.php

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector