DOMDocument->loadHTMLFile()

(no version information, might be only in CVS)

DOMDocument->loadHTMLFile() --  Load HTML from a file

说明

class DOMDocument {

bool loadHTMLFile ( string filename )

}

The function parses the HTML document in the file named filename. Unlike loading XML, HTML does not have to be well-formed to load.

This function may also be called statically to load and create a DOMDocument object. The static invocation may be used when no DOMDocument properties need to be set prior to loading.

参数

filename

The path to the HTML file.

返回值

如果成功则返回 TRUE,失败则返回 FALSE

范例

例子 1. Creating a Document

<?php
$doc
= DOMDocument::loadHTMLFile("filename.html");
print
$doc->saveHTML();

$doc = new DOMDocument();
$doc->loadHTMLFile("filename.html");
print
$doc->saveHTML();
?>


add a note add a note User Contributed Notes
yellow5 at beggarchooser dot com
29-Nov-2005 01:49
Here's the function I use to recursively get all text within a node:

function GetNodeText($ndNode)
{
   $sTagText = "";

   if ($ndNode->nodeName == "#text")
   {
       $sTagText = $ndNode->nodeValue;
   }

   if ($ndNode->hasChildNodes())
   {
       $sTagText .= GetNodeText($ndNode->firstChild);
   }

   if ($ndNode->nextSibling)
   {
       $sTagText .= GetNodeText($ndNode->nextSibling);
   }

   return $sTagText;
}
Lachlan Hunt
27-Sep-2005 02:15
Andy, the code you gave should not give that result.  In your code, $tag is an <a> element and the nodeValue of elements is null, according to the DOM2 spec.  You need to get at the text node first, before getting the node value.
<?
...
foreach (
$tags as $tag) {
       echo
$tag->getAttribute('href').' | '.$tag->childNodes->item(0)->nodeValue."\n";
}
?>

This should output:

/mypage1 | Hello World!
/mypage2 | Another Hello World!
andy at carobert dot com
26-May-2005 04:24
This puts the HTML into a DOM object which can be parsed by individual tags, attributes, etc..  Here is an example of getting all the 'href' attributes and corresponding node values out of the 'a' tag. Very cool....

<?php
$myhtml
= <<<EOF
<html>
<head>
<title>My Page</title>
</head>
<body>
<p><a href="/mypage1">Hello World!</a></p>
<p><a href="/mypage2">Another Hello World!</a></p>
</body>
</html>
EOF;

$doc = new DOMDocument();
$doc->loadHTML($myhtml);

$tags = $doc->getElementsByTagName('a');

foreach (
$tags as $tag) {
       echo
$tag->getAttribute('href').' | '.$tag->nodeValue."\n";
}
?>

This should output:

/mypage1 | Hello World!
/mypage2 | Another Hello World!
bens at effortlessis dot com
09-Apr-2005 08:11
Note that this function doesn't parse the individual tags WITHIN the html file - it's all loaded as a "black box", and you end up with an XML widget that comprises nothing but the complete chunk of HTML.

I was hoping it would function as a sort of HTML-validator/parser, but that doesn't seem to be the case.