如果你想使用 DOM,你必须理解这个概念。 DOM 文档中的所有内容(包括 DOMDocument)都是一个 Node。
DOMDocument 是节点的分层树结构。它从根节点开始。该根节点可以有子节点,并且所有这些子节点都可以有自己的子节点。基本上所有的东西都在一个DOMDocument
是某种节点类型,可以是元素、属性或文本内容。
HTML Legend:
/ \ UPPERCASE = DOMElement
HEAD BODY lowercase = DOMAttr
/ \ "Quoted" = DOMText
TITLE DIV - class - "header"
| \
"The Title" H1
|
"Welcome to Nodeville"
上图显示了带有一些节点的 DOMDocument。有一个根元素 (HTML) 和两个子元素(HEAD 和 BODY)。连接线称为轴。如果沿着轴向下追踪到 TITLE 元素,您将看到它有一个 DOMText 叶子。这很重要,因为它说明了一个经常被忽视的事情:
<title>The Title</title>
不是一个,而是两个节点。具有 DOMText 子级的 DOMElement。同样,这个
<div class="header">
实际上是三个节点:DOMElement 和持有 DOMText 的 DOMAttr。因为所有这些都从 DOMNode 继承了它们的属性和方法,所以熟悉DOMNode 类。 http://de.php.net/manual/en/class.domnode.php
实际上,这意味着您获取的 DIV 链接到文档中的所有其他节点。您可以随时一直到达根元素或向下到达叶元素。一切都在那里。您只需查询或遍历文档即可获取所需信息。
无论您是否通过迭代来做到这一点childNodes
of the DIV
or use getElementByTagName()
或者 XPath 由您决定。您只需了解您使用的不是原始 HTML,而是代表整个 HTML 文档的节点。
如果您需要帮助从文档中提取特定信息,则需要澄清要从中获取哪些信息。例如,您可能会问如何从表中获取所有链接,然后我们可以回答如下内容:
$div = $dom->getElementById('showContent');
foreach ($div->getElementsByTagName('a') as $link)
{
echo $dom->saveXML($link);
}
但除非您更具体,否则我们只能猜测哪些节点可能相关。
如果您需要有关如何使用 DOM 的更多示例和代码片段,请浏览我之前对相关问题的回答:
- https://stackoverflow.com/search?q=user%3A208809+DOM https://stackoverflow.com/search?q=user%3A208809+DOM
到目前为止,您可能拥有的 DOM 的每个基本到中等用例都应该有一个片段。