2015-04-05 113 views
-1

我:PHP提取HTML标记和内容

<html> 
<head> 
    <title>My Page</title> 
</head> 
<body> 
    <p>paragraph 1</p> 
    <p>paragraph 2</p> 
    <p>paragraph 3</p> 
    <p>paragraph 4</p> 
    <ul> 
     <li>item # 1</li> 
     <li>item # 2</li> 
     <li>item # 3</li> 
     <li>item # 4</li> 
    </ul> 
    <a href="#">anchor 1</a> 
    <a href="#">anchor 2</a> 
    <a href="#">anchor 3</a> 
    <a href="#">anchor 4</a> 
    <div>div # 1</div> 
    <div>div # 2</div> 
    <div>div # 3</div> 
    <div>div # 4</div> 
</body> 
</html> 

我希望能够提取指定的标记,可以说一个div标签,并且它的内容。

到目前为止,我有

$file = file_get_contents('file.html'); 
$dom = new DOMDocument(); 
$dom->loadHTML($file); 
$xpath = new DOMXpath($dom); 
$paragraphs = $xpath->query("/html/body//p"); 

for($i = 0; $i < $paragraphs->length; $i++) 
{ 
    # echo the tag and it's contents 
} 

我尝试使用nodeValuetextContent,但他们只是打印标签的内容,而不是加标签的内容。

这是我第一次在PHP中使用DOM解析器。我知道使用正则表达式来解析HTML/XML是抗议,所以我使用DOM解析器。任何建议都会有帮助。

回答

1

这应该适用于PHP 5.3.6+版本。只需将该节点传递给DOMDocument :: saveHTML函数即可。

for($i = 0; $i < $paragraphs->length; $i++) 
{ 
    echo $dom->saveHTML($paragraph->item($i)); 
} 

我希望这有助于!

+0

很好地完成!谢谢! – 2015-04-05 22:36:28

+0

简单而小巧。正是我所需要的 – 2015-04-05 22:37:23

+0

'foreach($ paragraph as $ pargraph){'也简单。 – chris85 2015-04-05 22:48:39