繁体   English   中英

如何将html表列转换为表行,dom对象,php

[英]How to convert html table columns to table rows, dom object, php

我有一个html表,我想将其列转换为行。 列可以包含计划文本,表单元素(输入,选择,复选框)或html标签(span,div)。 考虑以下html:

<html>
  <body>
    <table>
      <tr>
        <td>Cell 1</td>
        <td>Cell 2</td>
        <td>Cell 3</td>
      </tr>
      <tr>
        <td>Cell 4</td>
        <td>Cell 5</td>
        <td>Cell 6</td>
      </tr>
    </table>
  </body>
</html>

dom操作后,我需要以下内容:

<html>
  <body>
    <table>
      <tr>
        <td>Cell 1</td>
      </tr>
      <tr>
        <td>Cell 2</td>
      </tr>
      <tr>
        <td>Cell 3</td>
      </tr>
      <tr>
        <td>Cell 4</td>
      </tr>
      <tr>
        <td>Cell 5</td>
      </tr>
      <tr>
        <td>Cell 6</td>
      </tr>
    </table>
  </body>
</html>

$rows = $xpath->query('xpath to table/tr');
foreach ($rows as $row){
    $cols = $xpath->query('xpath to table/tr/*');
    $row->parentNode->removeChild($row);
    foreach ($cols as $col){
        $newNode = $this->createElement('tr');
        $newNode->appendChild($col);
        $node->appendChild($newNode);
    }
}
echo $dom->saveHTML();

它的工作正常,但添加了空行:

<table>
  <tr></tr>
  <tr></tr>
  <tr>
    <td>Cell 1</td>
  </tr>
  <tr>
    <td>Cell 2</td>
  </tr>
<table>

知道我在做什么错吗?

您可以使用DOM解析HTML和XML,这是读取表的方式:

$dom = new DOMDocument;
$dom->loadHTML( $table );
$tds = array();
foreach( $dom->getElementsByTagName( 'td' ) as $td ) {
  $tds[] = $td->nodeValue;
}

要打印展平的结构:

foreach($tds as $td){
    print '<td>'.$td.'</td>';
}

您可以将每个<td>元素移动到其当前祖先<table>元素的新<tr>子元素中:

foreach($xpath->query('//td') as $td)
    $xpath->query('ancestor::table[1]', $td)->item(0)
        ->appendChild($doc->createElement('tr'))->appendChild($td);
{{;;}}

之后,您可以删除不再具有任何<td>子级的所有<tr>元素:

foreach($xpath->query('//tr[0 = count(td)]') as $tr)
    $tr->parentNode->removeChild($tr);
{{;;}}

您的文档现已转换:

<table>
<tr><td>Cell 1</td></tr>
<tr><td>Cell 2</td></tr>
<tr><td>Cell 3</td></tr>
<tr><td>Cell 4</td></tr>
<tr><td>Cell 5</td></tr>
<tr><td>Cell 6</td></tr>
</table> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM