2013-03-06 57 views
0

我有一個html表,我想將其列轉換爲行。列可以包含計劃文本,表單元素(輸入,選擇,複選框)或html標記(span,div)。考慮下面的html:如何將html表列轉換爲錶行,dom對象,php

<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> 

任何想法我做錯了什麼?

回答

0

您可以解析HTML和XML與DOM,你這是怎麼能讀表:

$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>'; 
} 
0

您可以將每個<td>元素移入新<tr>它的當前祖先的孩子<table>元素:

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> 
相關問題