PHP提取html标记和内容

时间:2015-04-05 22:15:48

标签: php html dom xpath

我有:

<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 个答案:

答案 0 :(得分:1)

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

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

我希望这有帮助!