У меня есть простой 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>
Некоторые примечания
Буду ли я лучше деконструировать всю вещь в массив необходимых атрибутов элемента, а затем восстановить его в правильном формате? Или было бы проще перебрать DOM и найти нужные мне атрибуты, затем применить их к родителям и удалить ненужные атрибуты, где это необходимо?
И есть ли способ обработать все это рекурсивно, чтобы мне не понадобилось несколько уровней проверок, основанных на том, находится ли он на уровне «td», «a» или «img»?
Вы можете изменить то, что вы хотите с классом 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
Других решений пока нет …