0

HTML テーブルがあり、その列を行に変換したいと考えています。列には、プラン テキスト、フォーム要素 (input、select、checkbox)、または 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>

私が間違っていることは何ですか??

4

2 に答える 2

0

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>';
}
于 2013-03-06T12:48:20.280 に答える
0

各要素を現在の祖先要素の<td>新しい子に移動できます。<tr><table>

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

その後、子<tr>を持たなくなったすべての要素を削除できます。<td>

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> 
于 2013-03-15T17:48:18.840 に答える