使用PHP读取XML标记来创建表

时间:2011-04-22 14:44:39

标签: php xml xml-parsing html-table

我有和XML文件一样构造如下:

<Row>
<Cell><Data>Name</Data></Cell>
<Cell><Data>Surname</Data></Cell>
<Cell><Data>Email</Data></Cell>
</Row>
<Row>
<Cell><Data>Name</Data></Cell>
<Cell><Data>Surname</Data></Cell>
<Cell><Data>Email</Data></Cell>
</Row>
<Row>
<Cell><Data>Name</Data></Cell>
<Cell><Data>Surname</Data></Cell>
<Cell><Data>Email</Data></Cell>
</Row>
<Row>
<Cell><Data>Name</Data></Cell>
<Cell><Data>Surname</Data></Cell>
<Cell><Data>Email</Data></Cell>
</Row>

我想要做的是使用PHP将它们添加到表中,到目前为止我编写了这段代码:

<?php
$dom = new DomDocument();
$dom -> load("file.xml");
$data = $dom->getElementsByTagName('Data'); 
echo( "<table><tr>");
foreach( $data as $node){ echo( "<td>". $node -> textContent . "<td>");}
echo( "</tr></table>");

?>

问题是它将所有数据附加到td标签上,这些标签变得非常长,我需要它做的是在读取的3个数据标签之后添加一个tr标签。

它目前正在创建类似:

<table>
<tr>
<td>Name</td><td>Surname</td><td>Email</td>
<td>Name</td><td>Surname</td><td>Email</td>
<td>Name</td><td>Surname</td><td>Email</td>
<td>Name</td><td>Surname</td><td>Email</td>
</tr>
</table>

我需要它

<table>
<tr><td>Name</td><td>Surname</td><td>Email</td></tr>
<tr><td>Name</td><td>Surname</td><td>Email</td></tr>
<tr><td>Name</td><td>Surname</td><td>Email</td></tr>
<tr><td>Name</td><td>Surname</td><td>Email</td></tr>
</table>

HELP! : - )

2 个答案:

答案 0 :(得分:3)

稍微更改for循环:

$n = 0;
foreach($data as $node)
{ 
    if($n % 3 == 0) { echo '<tr>'; }
    echo( "<td>". $node -> textContent . "<td>");
    if(++$n % 3 == 0) { echo '</tr>'; }
}

并删除您已经拥有的开始和结束tr

答案 1 :(得分:0)

这涉及对代码的简单编辑。如您所希望的那样 每个第三个条目,您只需要在循环内移动<tr>

这可以解决您的问题:

<?php
    $dom = new DomDocument();
    $dom -> load("file.xml");
    $data = $dom->getElementsByTagName('Data'); 

    $counter = 0; // Set the entry counter

    echo( "<table>");

    foreach($data as $node) {
        if ($counter % 3 == 0) {
            echo '<tr>';
        }

        echo "<td>". $node -> textContent . "<td>";

        if($counter % 3 == 0) {
            echo '</tr>';
        }

        $counter++; // Increment the counter
    }

    echo( "</table>");
?>

这不是最干净的代码,但应该有效。