我有一点问题 我想用PHP解析一个简单的HTML文档。 这是简单的HTML:
<html>
<body>
<table>
<tr>
<td>Colombo <br> Coucou</td>
<td>30</td>
<td>Sunny</td>
</tr>
<tr>
<td>Hambantota</td>
<td>33</td>
<td>Sunny</td>
</tr>
</table>
</body>
</html>
这是我的PHP代码:
$dom = new DOMDocument();
$html = $dom->loadHTMLFile("test.html");
$dom->preserveWhiteSpace = false;
$tables = $dom->getElementsByTagName('table');
$rows = $tables->item(0)->getElementsByTagName('tr');
foreach ($rows as $row)
{
$cols = $row->getElementsByTagName('td');
echo $cols->item(0)->nodeValue.'<br />';
echo $cols->item(1)->nodeValue.'<br />';
echo $cols->item(2)->nodeValue;
}
但正如您所看到的,我有一个<br>
标签,我需要它,但是当我的PHP代码运行时,它会删除此标签。
任何人都可以解释我如何保留它吗?
答案 0 :(得分:2)
我建议你在XPath的帮助下捕获表格单元格的值:
$values = array();
$xpath = new DOMXPath($dom);
foreach($xpath->query('//tr') as $row) {
$row_values = array();
foreach($xpath->query('td', $row) as $cell) {
$row_values[] = innerHTML($cell);
}
$values[] = $row_values;
}
此外,我遇到的问题与<br>
标记被删除的内容一样,因为它们本身被视为空节点;不幸的是,它们不会自动替换为换行符(\n
);
所以我所做的就是设计我自己的innerHTML函数,这在许多项目中都被证明是非常宝贵的。在这里,我与您分享:
function innerHTML(DOMElement $element, $trim = true, $decode = true) {
$innerHTML = '';
foreach ($element->childNodes as $node) {
$temp_container = new DOMDocument();
$temp_container->appendChild($temp_container->importNode($node, true));
$innerHTML .= ($trim ? trim($temp_container->saveHTML()) : $temp_container->saveHTML());
}
return ($decode ? html_entity_decode($innerHTML) : $innerHTML);
}