function format(\DOMNode $node, $treeIndex = 0)
{
//不格式化的标签
if (in_array($node->nodeName, ['title', 'p', 'span', 'li']))
return;
if ($node->hasChildNodes()) {
$treeIndex++;
$tabStart = "\r\n" . str_repeat("\t", $treeIndex);
$tabEnd = "\r\n" . str_repeat("\t", $treeIndex - 1);
$i = 0;
while ($childNode = $node->childNodes->item($i++)) {
if ($childNode->nodeType == XML_TEXT_NODE) {
if (ctype_space(str_replace("\xc2\xa0", '', $childNode->nodeValue))) {
$node->removeChild($childNode);
$i--;
continue;
}
$childNode->nodeValue = trim($childNode->nodeValue);
}
$node->insertBefore($node->ownerDocument->createTextNode($tabStart), $childNode);
$i++;
$this->format($childNode, $treeIndex);
};
$node->appendChild($node->ownerDocument->createTextNode($tabEnd));
}
}
$html = '<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body></body></html>';
$doc = new \DOMDocument();
//$doc->formatOutput = true; //不知道是不是我的理解问题,这个选项格式化出来的并不完美
$doc->loadHTML($html);
format($doc->documentElement);
echo $doc->saveHTML();

php DOMDocument 递归 格式化缩进HTML文档的更多相关文章

  1. 【Android】Eclipse性能优化,快捷方式,文档注释

    快捷方式 方法注释的快捷键:ALT + SHIFT +J 格式化:Ctrl+Shift+F 把当前选中的文本全部变味大写:Ctrl+Shift+X 把当前选中的文本全部变为小写:Ctrl+Shift+ ...

  2. javadoc 文档

    Java 文档 // 注释一行/* ...... */ 注释若干行/** ...... */ 注释若干行,并写入 javadoc 文档 通常这种注释的多行写法如下: /*** .........* . ...

  3. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  4. Java代码规范、格式化和checkstyle检查配置文档

    http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...

  5. Latex 文档格式化

    title: "Latex 文档格式化" author: 李龙翔 date: "Nov 22, 2019" subject: "Markdown&qu ...

  6. editplus格式化xml文档

    使用editplus打开xml文档,发现文件内容没有格式化,非常难看,使用IE9打开这个xml文档是格式化的,但是IE9打开不能编辑. 在网上找了一些资料发现能够通过一个小插件来是editplus格式 ...

  7. Vb.Net Xml文档格式化

    最近在处理Webservice文档的时候,因为是未格式化的,需要处理,所以有了以下代码. #Region "Xml字符串转换成格式化的XML文件" 'txt_Result.Text ...

  8. 【转】循环递归遍历XML文档或按某要求遍历XML文档

    <?xml version="1.0" encoding="UTF-8"?> <catalog> <cd> <titl ...

  9. MyEclipse保存文件时 自动格式化代码! 不包括文档注释

    设置不格式化 文档注释

随机推荐

  1. DDMS中File Explorer无法查看data/data文件解决办法

    http://www.cnblogs.com/smyhvae/p/3881477.html  找了个连接 问题描述:最近在学习Android SQLite中的SQLiteOpenHelper,使用SQ ...

  2. Linux前传——第一次写技术博客

    准备写技术博客了.不过,真的没什么技术,以后就写写学习上面遇到的问题与想法吧.

  3. ural 1192 Ball in a Dream

    #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # ...

  4. Qt编程之Qt样例表(QSS)

    For a long time, Qt has allowed you to decorate your GUIs with CSS’ish style sheets. Inspired by the ...

  5. 一个坑:java.sql.ResultSet.getInt==》the column value; if the value is SQL NULL, the value returned is 0

    Retrieves the value of the designated column in the current row of this ResultSet object as a String ...

  6. 黑马程序员_Java其他对象(System,Runtime,Date,Calendar,Marh-Random)

    System System类包含一些有用的类字段和方法(都是静态的).它不能被实例化. 在System类提供的设施中,有标准输入.标准输出和错误输出流:对外部定义的属性和环境变量的访问:加载文件和库的 ...

  7. windows下MongoDB的安装及配置

    http://jingyan.baidu.com/article/d5c4b52bef7268da560dc5f8.html 使用MongoVUE链接本地mongodb 基本用法见这里:http:// ...

  8. HDU_2015——偶数求和

    Problem Description 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值 ...

  9. openstack neutron debugs listss

    Connection to neutron failed: [Errno 111] Connection refused

  10. redis 网络流程图 <一>

    本来一直想好好读下redis源码.可是每次读了一点就不读了.  主要是没坚持每天都读. 隔几天看.就忘记前面的流程.就越来越不想看了.  很是蛋疼.这个还是要坚持读完的.打算这段时间都源码的时候.都大 ...