PHP中的DOMDocument

我刚刚开始阅读有关DOM的文档和示例,以便对文档进行爬网和解析。

例如,我有一部分文档如下所示:

    <div id="showContent">

<table>

<tr>

<td>

Crap

</td>

</tr>

<tr>

<td width="172" valign="top"><a href="link"><img height="91" border="0" width="172" class="" src="img"></a></td>

<td width="10">&nbsp;</td>

<td valign="top"><table cellspacing="0" cellpadding="0" border="0">

<tbody><tr>

<td height="30"><a class="px11" href="link">title</a><a><br>

<span class="px10"></span>

</a></td>

</tr>

<tr>

<td><img height="1" width="580" src="crap"></td>

</tr>

<tr>

<td align="right">

<a href="link"><img height="16" border="0" width="65" src="/buy"></a>

</td>

</tr>

<tr>

<td valign="top" class="px10">

<p style="width: 500px;">description.</p>

</td>

</tr>

</tbody></table></td>

</tr>

<tr>

<td>

Crap

</td>

</tr>

<tr>

<td>

Crap

</td>

</tr>

</table>

</div>

我正在尝试使用以下代码来获取所有tr标签,并分析其中是否包含废话或信息:

$dom = new DOMDocument();

@$dom->loadHTML($html);

$xpath = new DOMXPath($dom);

$tags = $xpath->query('.//div[@id="showContent"]');

foreach ($tags as $tag) {

$string="";

$string=trim($tag->nodeValue);

if(strlen($string)>3) {

echo $string;

echo '<br>';

}

}

但是我只是剥离了不带标签的字符串,例如:

Crap

Crap

Title

Description

但我想得到:

<tr>

<td>Crap</td>

</tr>

<tr>

<a href="link">title</a>

</tr>

如何保留html节点(标签)?

回答:

如果您想使用DOM,则必须了解这个概念。DOM文档中的所有内容(包括DOMDocument)都是一个节点。

DOMDocument是节点的分层树结构。它从根节点开始。该根节点可以有子节点,所有这些子节点都可以自己拥有子节点。基本上,a

DOMDocument中的所有内容都是某种节点类型,无论是元素,属性还是文本内容。

          HTML                               Legend: 

/ \ UPPERCASE = DOMElement

HEAD BODY lowercase = DOMAttr

/ \ "Quoted" = DOMText

TITLE DIV - class - "header"

| \

"The Title" H1

|

"Welcome to Nodeville"

上图显示了带有某些节点的DOMDocument。有一个带有两个子元素(HEAD和BODY)的根元素(HTML)。连接线称为轴。如果将轴跟随到TITLE元素,您将看到它具有一个DOMText叶。这很重要,因为它说明了一个经常被忽视的事情:

<title>The Title</title>

不是一个,而是两个节点。带有DOMText子级的DOMElement。同样,这

<div class="header">

实际上是三个节点:带有DOMAttr的DOMElement持有DOMText。由于所有这些都从DOMNode继承其属性和方法,因此必须熟悉DOMNode类。

实际上,这意味着您获取的DIV已链接到文档中的所有其他节点。您可以随时移至根元素或向下移至叶子。都在那里。您只需要查询或遍历文档以获取所需信息。

无论你做的是通过遍历childNodes中的DIV或使用getElementByTagName()或XPath是你。您只需要了解您不是在使用原始HTML,而是使用代表整个HTML文档的节点。

如果需要有关从文档中提取特定信息的帮助,则需要澄清要从文档中获取哪些信息。例如,您可以询问如何从表中获取所有链接,然后我们可以回答以下问题:

$div = $dom->getElementById('showContent');

foreach ($div->getElementsByTagName('a') as $link)

{

echo $dom->saveXML($link);

}

但是除非您更具体,否则我们只能猜测哪些节点可能是相关的。

以上是 PHP中的DOMDocument 的全部内容, 来源链接: utcz.com/qa/412541.html

回到顶部