示例HTML ...
<html>
<head></head>
<body>
<table>
<tr>
<td class="rsheader"><b>Header Content</b></td>
</tr>
<tr>
<td class="rstext">Some text (Most likely will contain lots of HTML</td>
</tr>
</table>
</body>
</html>
我需要将HTML页面转换为该HTML页面的模板化版本。 HTML页面由几个框组成,每个框都有一个标题(在上面的代码中称为“rsheader”)和一些文本(在上面的代码中称为“rstext”)。
我正在尝试编写一个PHP脚本来检索HTML页面,可能使用file_get_contents然后提取rsheader和rstext div中的任何内容。基本上我不知道怎么样!我尝试过使用DOM,但我不太了解它,虽然我确实设法提取文本但它忽略了任何HTML。
我的PHP ......
<?php
$html = '<html>
<head></head>
<body>
<table>
<tr>
<td class="rsheader"><b>Header Content</b></td>
</tr>
<tr>
<td class="rstext">Some text (Most likely will contain lots of HTML</td>
</tr>
</table>
</body>
</html>';
$dom = new DomDocument();
$dom->loadHtml($html);
$xpath = new DomXpath($dom);
$div = $xpath->query('//*[@class="rsheader"]')->item(0);
echo $div->textContent;
?>
如果我执行print_r($ div),我会看到这个......
DOMElement Object
(
[tagName] => td
[schemaTypeInfo] =>
[nodeName] => td
[nodeValue] => Header Content
[nodeType] => 1
[parentNode] => (object value omitted)
[childNodes] => (object value omitted)
[firstChild] => (object value omitted)
[lastChild] => (object value omitted)
[previousSibling] =>
[nextSibling] => (object value omitted)
[attributes] => (object value omitted)
[ownerDocument] => (object value omitted)
[namespaceURI] =>
[prefix] =>
[localName] => td
[baseURI] =>
[textContent] => Header Content
)
正如您所看到的,textContent节点中没有HTML标签让我相信我会采用错误的方式:(
真的希望有人可以给我一些帮助...
提前致谢
保
答案 0 :(得分:2)
X-Path可能比你完成这项任务需要更多的大锤。我会尝试使用DOMDocument的getElementById() method代替。下面是一个例子,改编自this post。
注意:已更新为使用标记和类名而不是元素ID。
function getChildHtml( $node )
{
$innerHtml= '';
$children = $node->childNodes;
foreach( $children as $child )
{
$innerHtml .= sprintf( '%s%s', $innerHtml, $child->ownerDocument->saveXML( $child ) );
}
return $innerHtml;
}
$dom = new DomDocument();
$dom->loadHtml( $html );
// Gather all table cells in the document.
$cells = $dom->getElementsByTagName( 'td' );
// Loop through the collected table cells looking for those of class 'rsheader' or 'rstext'.
foreach( $cells as $cell )
{
if( $cell->getAttribute( 'class' ) == 'rsheader' )
{
$headerHtml = getChildHtml( $cell );
// Do something with header html.
}
if( $cell->getAttribute( 'class' ) == 'rstext' )
{
$textHtml = getChildHtml( $cell );
// Do something with text html.
}
}
答案 1 :(得分:0)
看看这个答案并将其作为指导原则: retrieving specific data from a website
如果您需要详细的帮助,我随时为您提供帮助。