PHP - DOM Parser 示例
PHP 中的 DOM 扩展提供了丰富的功能,我们可以用它对 XML 和 HTML 文档执行各种操作。我们可以动态构建 DOM 对象,从 HTML 文件或包含 HTML 标签树的字符串加载 DOM 文档。我们还可以将 DOM 文档保存到 XML 文件,或从 XML 文档中提取 DOM 树。
DOMDocument class 是 DOM 扩展中定义的最重要的 class 之一。
$obj = new DOMDocument($version = "1.0", $encoding = "")
它代表整个 HTML 或 XML 文档;作为文档树的根。DOMDocument class 包含了许多静态方法的定义,其中一些在此介绍 −
| 序号 | 方法 & 描述 |
|---|---|
| 1 | createElement 创建新的 element 节点 |
| 2 | createAttribute 创建新的 attribute |
| 3 | createTextNode 创建新的 text 节点 |
| 4 | getElementById 搜索具有特定 id 的 element |
| 5 | getElementsByTagName 搜索具有给定本地 tag name 的所有 element |
| 6 | load 从文件加载 XML |
| 7 | loadHTML 从字符串加载 HTML |
| 8 | loadHTMLFile 从文件加载 HTML |
| 9 | loadXML 从字符串加载 XML |
| 10 | save 将内部 XML 树转储回文件 |
| 11 | saveHTML 使用 HTML 格式将内部文档转储到字符串 |
| 12 | saveHTMLFile 使用 HTML 格式将内部文档转储到文件 |
| 13 | saveXML 将内部 XML 树转储回字符串 |
示例
我们将使用以下 HTML 文件作为本示例 −
<html>
<head>
<title></title>
</head>
<body>
<h2>Course details</h2>
<table border = "0">
<tbody>
<tr>
<td>Android</td>
<td>Gopal</td>
<td>Sairam</td>
</tr>
<tr>
<td>Hadoop</td>
<td>Gopal</td>
<td>Satish</td>
</tr>
<tr>
<td>HTML</td>
<td>Gopal</td>
<td>Raju</td>
</tr>
<tr>
<td>Web technologies</td>
<td>Gopal</td>
<td>Javed</td>
</tr>
<tr>
<td>Graphic</td>
<td>Gopal</td>
<td>Satish</td>
</tr>
<tr>
<td>Writer</td>
<td>Kiran</td>
<td>Amith</td>
</tr>
<tr>
<td>Writer</td>
<td>Kiran</td>
<td>Vineeth</td>
</tr>
</tbody>
</table>
</body>
</html>
我们现在将通过调用以下 PHP 代码中的 loadHTMLFile() 方法,从上述 HTML 文件中提取 Document Object Model −
<?php
/*** 创建一个新的 DOM 对象 ***/
$dom = new domDocument;
/*** 将 HTML 加载到对象中 ***/
$dom->loadHTMLFile("hello.html");
/*** 丢弃空白字符 ***/
$dom->preserveWhiteSpace = false;
/*** 通过标签名获取 table ***/
$tables = $dom->getElementsByTagName('table');
/*** 从 table 中获取所有行 ***/
$rows = $tables[0]->getElementsByTagName('tr');
/*** 循环遍历表格行 ***/
foreach ($rows as $row) {
/*** 通过标签名获取每个列 ***/
$cols = $row->getElementsByTagName('td');
/*** 输出值 ***/
echo 'Designation: '.$cols->item(0)->nodeValue.'<br />';
echo 'Manager: '.$cols->item(1)->nodeValue.'<br />';
echo 'Team: '.$cols->item(2)->nodeValue;
echo '<hr />';
}
?>
它将产生以下 输出 −
Designation: Android Manager: Gopal Team: Sairam ________________________________________ Designation: Hadoop Manager: Gopal Team: Satish ________________________________________ Designation: HTML Manager: Gopal Team: Raju ________________________________________ Designation: Web technologies Manager: Gopal Team: Javed ________________________________________ Designation: Graphic Manager: Gopal Team: Satish ________________________________________ Designation: Writer Manager: Kiran Team: Amith ________________________________________ Designation: Writer Manager: Kiran Team: Vineeth ________________________________________