ホームページ  >  記事  >  バックエンド開発  >  php DOMDocument はインデントされた HTML ドキュメントを再帰的にフォーマットします。_PHP チュートリアル

php DOMDocument はインデントされた HTML ドキュメントを再帰的にフォーマットします。_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:58:361122ブラウズ

php DOMDocument はインデントされた HTML ドキュメントを再帰的にフォーマットします。

<span>function</span> format(\DOMNode <span>$node</span>, <span>$treeIndex</span> = 0<span>)
{
    </span><span>//</span><span>不格式化的标签</span>
    <span>if</span> (<span>in_array</span>(<span>$node</span>->nodeName, <span>array</span>("title", "p", "span"<span>)))
        </span><span>return</span><span>;
    </span><span>if</span> (<span>$node</span>-><span>hasChildNodes()) {
        </span><span>$treeIndex</span>++<span>;
        </span><span>$tabStart</span> = "\r\n" . <span>str_repeat</span>("TTT", <span>$treeIndex</span><span>);
        </span><span>$tabEnd</span> = "\r\n" . <span>str_repeat</span>("EEE", <span>$treeIndex</span> - 1<span>);
        </span><span>$i</span> = 0<span>;
        </span><span>while</span> (<span>$childNode</span> = <span>$node</span>->childNodes->item(<span>$i</span>++<span>)) {
            </span><span>if</span> (<span>$childNode</span>->nodeType ==<span> XML_TEXT_NODE) {
                </span><span>if</span> (<span>preg_match</span>('#^\s*$#', <span>$childNode</span>-><span>nodeValue)) {
                    </span><span>$node</span>->removeChild(<span>$childNode</span><span>);
                    </span><span>$i</span>--<span>;
                    </span><span>continue</span><span>;
                }
                </span><span>$childNode</span>->nodeValue = <span>trim</span>(<span>$childNode</span>-><span>nodeValue);
            }
            </span><span>$node</span>->insertBefore(<span>$node</span>->ownerDocument->createTextNode(<span>$tabStart</span>), <span>$childNode</span><span>);
            </span><span>$i</span>++<span>;
            </span><span>$this</span>->format(<span>$childNode</span>, <span>$treeIndex</span><span>);
        };
        </span><span>$node</span>->appendChild(<span>$node</span>->ownerDocument->createTextNode(<span>$tabEnd</span><span>));
    }
}

</span><span>$html</span> = '<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body></body></html>'<span>;
</span><span>$doc</span> = <span>new</span><span> \DOMDocument(); 
</span><span>//</span><span>$doc->formatOutput = true; //不知道是不是我的理解问题,这个选项格式化出来的并不完美</span>
<span>$doc</span>->loadHTML(<span>$html</span>); format(<span>$doc</span>-><span>documentElement);
</span><span>echo</span> <span>$doc</span>->saveHTML();

www.bkjia.com本当http://www.bkjia.com/PHPjc/1102843.html技術記事 php DOMDocument は、インデントされた HTML ドキュメントを再帰的にフォーマットします。 function format(DOMNode $node, $treeIndex = 0){ // フォーマットされていないタグ if ( in_array ( $node -nodeName, array ("title", "p".. .
)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。