[英]How to convert html table columns to table rows, dom object, php
I've an html table and i want to convert its columns to rows. 我有一个html表,我想将其列转换为行。 Columns can contain plan text, form elements(input, select, checkbox), or html tags(span, div). 列可以包含计划文本,表单元素(输入,选择,复选框)或html标签(span,div)。 Consider the following html: 考虑以下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>
after dom operation i need the following: 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();
its working fine, but its adding empty rows: 它的工作正常,但添加了空行:
<table>
<tr></tr>
<tr></tr>
<tr>
<td>Cell 1</td>
</tr>
<tr>
<td>Cell 2</td>
</tr>
<table>
Any idea whats am i doing wrong?? 知道我在做什么错吗?
You can parse HTML and XML with DOM, this is how you could read a table: 您可以使用DOM解析HTML和XML,这是读取表的方式:
$dom = new DOMDocument;
$dom->loadHTML( $table );
$tds = array();
foreach( $dom->getElementsByTagName( 'td' ) as $td ) {
$tds[] = $td->nodeValue;
}
To print the structure flattened: 要打印展平的结构:
foreach($tds as $td){
print '<td>'.$td.'</td>';
}
You can move each <td>
element into a new <tr>
child of it's current ancestor <table>
element: 您可以将每个<td>
元素移动到其当前祖先<table>
元素的新<tr>
子元素中:
foreach($xpath->query('//td') as $td)
$xpath->query('ancestor::table[1]', $td)->item(0)
->appendChild($doc->createElement('tr'))->appendChild($td);
{{;;}}
Afterwards you can remove all <tr>
elements that do not have any <td>
children any longer: 之后,您可以删除不再具有任何<td>
子级的所有<tr>
元素:
foreach($xpath->query('//tr[0 = count(td)]') as $tr)
$tr->parentNode->removeChild($tr);
{{;;}}
Your document has now been transformed: 您的文档现已转换:
<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.