2015-04-05 142 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