规则是:当我使用 HTML 时,我必须使用解析器。
假设你有一个这样的 HTML 文档:
$html = '<html>
<head><title>Untitled</title></head>
<body>
<div class="class">
<b>My Content 1</b>
</div>
<div class="class">
<b>My Content 2</b>
</div>
<div class="class">
<b>My Content 3</b>
</div>
</body>
</html>';
将其加载到一个对象中,根据加载的 HTMLDOMDocument
初始化一个对象:DOMXPath
$dom = new DOMDocument();
libxml_use_internal_errors(1);
$dom->formatOutput = True;
$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );
使用此命令,您可以访问所有内容<div class="class">
:
foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
echo trim( $node->nodeValue ) . '<br>';
}
你的输出:
My Content 1
My Content 2
My Content 3
如果要将节点回显为 HTML,请替换echo ...
和:
echo $dom->saveHTML( $node );
将输出:
<div class="class">
<b>My Content 1</b>
</div>
<div class="class">
<b>My Content 2</b>
</div>
<div class="class">
<b>My Content 3</b>
</div>
最后,如果您只想回显节点的innerHTML,则必须编写如下内容:
foreach( $xpath->query( '//div[@class="class"]' ) as $node )
{
foreach ($node->childNodes as $child)
{
echo $dom->saveHTML( $child );
}
}
你的输出将是:
<b>My Content 1</b>
<b>My Content 2</b>
<b>My Content 3</b>