使用PHP DOM将HTML输出转换为其他结构

时间:2017-09-13 01:19:40

标签: php html 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>

有些注意事项

  • 输入文件的结构并不总是相同。
  • &#34; td&#34; widths,它基于子(或孙子)的宽度属性的百分比&#34; img&#34;节点与电子邮件总宽度相比(在本例中为600px)。
  • 附加自定义&#34;名称&#34;属于&#34; a&#34;和&#34; img&#34;标签基于图像的子串&#34; src&#34;属性。

我是否最好将整个事物解构为所需元素属性的数组,然后以正确的格式重构它?或者更容易循环遍历DOM并查找我需要的属性然后将它们应用于父级并删除不需要的属性?

有没有办法以递归方式处理这一切,这样我就不需要根据它是否在&#34; td&#34; &#34;&#34;或&#34; img&#34;水平?

1 个答案:

答案 0 :(得分: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