ルールは次のとおりです。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>';
それをオブジェクトにロードし、ロードされた HTML に基づいてオブジェクトをDOMDocument
初期化します。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>