用php操作DOM解析,方便、实用

PHP最新项目speedx
前段时间无聊的时候写了一个小项目,我给他取名叫speedx,随便取的一个名,原码我把它放在了这里:
https://www.elives.vip/elives/index.php/2018/05/21/speedxinfor/,目前还没有完全完工,还没有达到我的预期,不过现在基本核心功能已经可以用了,用起来还是很爽的。现在来说说他的用途:
1: 创建DOM节点,目前所有HTML标签节点都能创建,包括最新的H5标签, 如:
$test = DOCTYPE_HTML_4_01_STRICT;
$domset["doctype"] = create_node(DOCTYPE_HTML_4_01_STRICT);//创建doctype类型节点
$domset["div"] = create_node('<div class = "loginbox" id = "testloging" style = "width:110px;height:200px;border:1px solid black;" >');//创建doctype类型节点
$domset["style"] = create_node("<style type='text/css'>");
$domset["script"] = create_node("<script>");
$domset["img"] = create_node("<img src=testimg.jpg width=100px>");
$domset["br"] = create_node("<br>");
$domset["text"] = create_nodeText("这是内部文本内容");
$domset["_null_"] = creat_node(null);//创建空节点,或直接传入null;
2: 对于插入子节点、兄弟节点、属性操作等也是很简单的:
<?php
//div节点添加子节点
$node_div = create_node('<div class = "loginbox" id = "testloging" style = "width:110px;height:200px;border:1px solid black;" >');
$node_span_c = create_node("<span id=test class=alert>");
$node_div->append($node_span_c);
printvar($node_div);
//ul节点添加节点集
$node_ul = create_node("<ul>");
$ul_li_set = create_nodeSet("li",5)->appendChild("<img src=test/img.jpg>");
$node_ul->append($ul_li_set);
printvar($node_ul);
//style节点添加class节点
$style = create_node("<style type=text/css>");
$class_alert = create_styleClass(".alert");
$item1 = create_classItem("display:flex;");
$item2 = create_classItem("float: auto;");
$class_alert->append([$item1,$item2]);
$style->append($class_alert);
3:以对象的方式创建CSS样式,并且自动做浏览器匹配,自动在相应的CSS属性前加前缀,也就是说书写的时候我们只要按标准的样式写一遍就行,本项目会自动添加其它浏览对应的样式匹配。比如:
我们写这样一个样式属性:
$itembox = create_classItem("display:inline-box;");
就会生成以下的完整样式属性:
-ms-display:inline-box;
-webkit-display:-webkit-inline-box;
-moz-display:-moz-inline-box;
display:inline-box;
是不是很实用,对于创建一个style样式就更简单了。如,我们创建一个 .from 的样式类,如下
$class4 = create_styleClass('@keyframes testanimations');
$class4_1 = create_styleClass("from");
$item1_class4_1 = create_classItem('transform: translate(0, 0);');
$class4_1->append($item1_class4_1);
$class4_2 = create_styleClass("20%");
$item2_class4_1 = create_classItem('transform: translate(20px, 20px);');
$class4_2->append($item2_class4_1);
$class4_3 = create_styleClass("40%");
$item3_class4_1 = create_classItem('transform: translate(40px, 0);');
$class4_3->append($item3_class4_1);
$class4->append([$class4_1,$class4_2,$class4_3]);
生成的.from类如下:
@-moz-keyframes testanimations{
from{-ms-transform:translate(0,0);-webkit-transform:translate(0,0);-moz-transform:translate(0,0);transform:translate(0,0);}
20%{-ms-transform:translate(20px,20px);-webkit-transform:translate(20px,20px);-moz-transform:translate(20px,20px);transform:translate(20px,20px);}
40%{-ms-transform:translate(40px,0);-webkit-transform:translate(40px,0);-moz-transform:translate(40px,0);transform:translate(40px,0);}
}
@-webkit-keyframes testanimations{
from{-ms-transform:translate(0,0);-webkit-transform:translate(0,0);-moz-transform:translate(0,0);transform:translate(0,0);}
20%{-ms-transform:translate(20px,20px);-webkit-transform:translate(20px,20px);-moz-transform:translate(20px,20px);transform:translate(20px,20px);}
40%{-ms-transform:translate(40px,0);-webkit-transform:translate(40px,0);-moz-transform:translate(40px,0);transform:translate(40px,0);}
}
@keyframes testanimations{
from{-ms-transform:translate(0,0);-webkit-transform:translate(0,0);-moz-transform:translate(0,0);transform:translate(0,0);}
20%{-ms-transform:translate(20px,20px);-webkit-transform:translate(20px,20px);-moz-transform:translate(20px,20px);transform:translate(20px,20px);}
40%{-ms-transform:translate(40px,0);-webkit-transform:translate(40px,0);-moz-transform:translate(40px,0);transform:translate(40px,0);}
}
可以看出,已经做了自动匹配了,目前匹配的浏览器有:火狐、谷哥、安卓、苹果、微软、还欧明。
4:节点筛选过滤器,这里不做介绍了。
5:远程站点数据获取,就是从其它站点上的网页上弄点数据什么的,目前还没有做到网站数据抓取,不过这也是后期完善的一部分。
其它的项目还有很多,详情我会在下面这个博客上逐渐登出来。https://www.elives.vip 欢迎大家多多捧场,站点刚刚弄的,里面目前没什么内容,我会尽快多放些干货放上面,这年头,满屏都是抖奶的年代,我们程序员坚守一方净土不容易,希望大家多多支持我,谢谢。