PHP DOM のスニペット集

このページは、PHP の DOM のスニペットなどをまとめる予定のページです。

目次

注意

  • コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。
  • PHP 5.3 前後でもできるだけ使用できるようにシンタックスを調整していますが、一部使えない場合があるかもしれません。

スニペット

HTML 読み込み (文字列から)

$htmlString = '<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>テスト文書</title>
</head>
<body>
    <h1>テスト文書</h1>
</body>
</html>
';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($htmlString);
libxml_clear_errors();

HTML 読み込み (ファイルから)

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTMLFile('/path/to/file.html');
libxml_clear_errors();

HTML 保存

$html = '<!DOCTYPE html>' . "\n" . $doc->saveHTML($doc->documentElement);
file_put_contents('/path/to/file.html', $html);
  • saveHTMLFile() でもよいですが、saveHTMLFile() だと日本語が数値参照に変換されるなどします。(環境によるかもしれません)

タグ文字列から要素を生成

$fg = $doc->createDocumentFragment();
$fg->appendXML('<div id="test">test</div>');
$div = $fg->firstChild;

XPath 検索

1つの要素

$xpath = new DOMXPath($doc);
$body = $xpath->query('//body')->item(0);

複数の要素

$xpath = new DOMXPath($doc);
$liList = $xpath->query('descendant::li', $body);
foreach ($liList as $li) {
    echo $li->textContent . PHP_EOL;
}