php 解析XML DOMXPath的例子
xml文件结构如下
php代码解析:
$url="";//输出xml的URL $dom = new DOMDocument('1.0', 'utf-8'); $dom->load($url);
这样我们捕获里XML数据,然后一点点截取,这段XML有多个URL节点,需要利DOMPATH解析
$xpath = new DOMXPath($dom); $node = '//url'; $length = $xpath->query($node)->length;
然后根据每个url内的字节点去获取数据
for($i = 0; $i < $length; $i++) { $data = array(); $m_date = date('Y-m-d', strtotime($xpath->query($node.'['.($i+1).']/date')->item(0)->nodeValue)); $m_start = $xpath->query($node.'['.($i+1).']/start')->item(0)->nodeValue; $m_end = $xpath->query($node.'['.($i+1).']/end')->item(0)->nodeValue; $m_title = $xpath->query($node.'['.($i+1).']/title')->item(0)->nodeValue; $m_format = $xpath->query($node.'['.($i+1).']/format')->item(0)->nodeValue; $m_season = $xpath->query($node.'['.($i+1).']/season')->item(0)->nodeValue; $m_round = $xpath->query($node.'['.($i+1).']/round')->item(0)->nodeValue; /*$homeTeam = $xpath->query($node.'['.($i+1).']/homeTeam')->item(0)->nodeValue; if(empty($homeTeam)) continue; $guestTeam = $xpath->query($node.'['.($i+1).']/guestTeam')->item(0)->nodeValue; if(empty($guestTeam)) continue;*/ $homeTeam = $xpath->query($node.'['.($i+1).']/homeTeam')->item(0)->nodeValue; $guestTeam = $xpath->query($node.'['.($i+1).']/guestTeam')->item(0)->nodeValue; if(empty($guestTeam) || empty($homeTeam)) { if($m_title){ $temp_title=explode(" ", $m_title); list($homeTeam,$guestTeam)=explode("vs", $temp_title[1]); unset($temp_title); } } if(empty($homeTeam)) continue; if(empty($guestTeam)) continue; }
在php中处理xml文档的类或插件是非常的多了,今天我来为各位介绍xmlreader simplexmlDOMDocument 等读取xml的例子,希望下文能帮助到大家。
要处理 XML 文件,有两种传统的处理思路: SAX 和 DOM 。 SAX 基于事件触发机制,对 XML 文件进行一次扫描,完成要进行的处理; DOM 则将整个 XML 文件构造为一棵 DOM树,通过对 DOM 树的遍历完成处理。这两种方法各有优缺点, SAX 的处理思路相对抽象,DOM 的处理过程相对烦琐,都不很适合新手的入门。PHP5 推出了一套新的 XML 处理函数,即 SimpleXML 。名如其实, SimpleXML 本身小巧精干,只提供了少量的几个方法函数,但用它处理起 XML 文件功能却非常强大,操作也非常的简单。
一,什么是xml,xml有什么用途
XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
XML的用途很多,可以用来存储数据,可以用来做数据交换,为很多种应用软件提示数据等等。
二,php读取xml的方法
xml源文件
代码如下 | 复制代码 |
<?xml version="1.0" encoding="UTF-8"?> <humans> <zhangying> <name>张映</name> <sex>男</sex> <old>28</old> </zhangying> <tank> <name>tank</name> <sex>男</sex> <old>28</old> </tank> </humans> |
1)DOMDocument读取xml
代码如下 | 复制代码 |
<?php $doc = new DOMDocument(); $doc->load('person.xml'); //读取xml文件 $humans = $doc->getElementsByTagName( "humans" ); //取得humans标签的对象数组 foreach( $humans as $human ) { $names = $human->getElementsByTagName( "name" ); //取得name的标签的对象数组 $name = $names->item(0)->nodeValue; //取得node中的值,如<name> </name> $sexs = $human->getElementsByTagName( "sex" ); $sex = $sexs->item(0)->nodeValue; $olds = $human->getElementsByTagName( "old" ); $old = $olds->item(0)->nodeValue; echo "$name - $sex - $old\n"; } ?> |
2)simplexml读取xml
代码如下 | 复制代码 |
<?php $xml_array=simplexml_load_file('person.xml'); //将XML中的数据,读取到数组对象中 foreach($xml_array as $tmp){ echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>"; } ?> |
3)用php正则表达式来记取数据
代码如下 | 复制代码 |
<?php $xml = ""; $f = fopen('person.xml', 'r'); while( $data = fread( $f, 4096 ) ) { $xml .= $data; } fclose( $f ); // 上面读取数据 preg_match_all( "/\<humans\>(.*?)\<\/humans\>/s", $xml, $humans ); //匹配最外层标签里面的内容 foreach( $humans[1] as $k=>$human ) { preg_match_all( "/\<name\>(.*?)\<\/name\>/", $human, $name ); //匹配出名字 preg_match_all( "/\<sex\>(.*?)\<\/sex\>/", $human, $sex ); //匹配出性别 preg_match_all( "/\<old\>(.*?)\<\/old\>/", $human, $old ); //匹配出年龄 } foreach($name[1] as $key=>$val){ echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ; } ?> |
4)xmlreader来读取xml数据
代码如下 | 复制代码 |
<?php
|
使用 DOMDocument 操控 XML
1. DOMDocument 解析 XML
代码如下 | 复制代码 |
// 创建一个 DOMDocument() $_doc = new DOMDocument(); // 载入 xml $_doc ->load( 'test.xml' ); // 取 version 标签 $_version = $_doc ->getElementsByTagName( 'version' ); echo $_version ->item( 2 )->nodeValue; // 遍历 version 标签 foreach ( $_version as $v ) { echo $v ->nodeValue; } 2. DOMDocument 生成 XML // 声明 xml $_doc = new DOMDocument( '1.0' , 'utf-8' ); // 排版格式 $_doc ->formatOutput = true ; // 创建一个主标签 $_root = $_doc ->createElement( 'root' ); // 创建一个一级标签 version $_version = $_doc ->createElement( 'version' ); // 给 version 标签里赋值 $_versionTextNode = $_doc ->createTextNode( '1.0' ); // 将值放入 version 标签里 $_version ->appendChild( $_versionTextNode ); // 将一级标签 version 放入 root 里 $_root ->appendChild( $_version ); // 将主标签写入 xml $_doc ->appendChild( $_root ); // 生成 xml $_doc ->save( 'aaa.xml' ); |
很多情况下 , 手工生成标记要求从上到下生成文档 , 必须保证标签都是完整的 , 开始和结束标签。尽管借助于一些 PHP 函数或类可以有所改善,不过 PHP 还提供了一组更有帮助的内置对象和函数。文档对象模型( Document Object Model , DOM )提供了一个树状结构,能很容易创建和处理标签。
三,小结
读取xml的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,<name>张映</name>.但是他们的测重点不同,前三种方法的读取xml的function的设计重点,是为了读取标签中的值,相当于jquery中的text()方法,而xmlreader呢他就不太一样,他的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为xml文件已经给定了,我就不想在搞xml文件出来了)。举个例子解释一下,
<data name='张映' sex='男' old='28'></data>
xmlreader的设计重点是为了读data里面的name sex old的值,而读取<data></data>的内容就比较麻烦了。他相当于jquery中attr('');这个东西。
文件名:xml.class.php
代码如下 | 复制代码 |
/*** * * * 文件名: xml.php * * 作 用: xml类,完善中,暂只支持三级节点 * * 作 者: loking(biyees) * * * * example 读取数据: * * $xml = new xml(“dbase.xml”,’table’); * * $data=$xml->xml_fetch_array(); * * echo ”<pre style=\”font-size:12px;\”>”; * * print_r($data); * * * ******************/ class xml{ var $dbase; //数据库,要读取的XML文件 var $dbname; //数据库名称,顶层元素,与数据库文件名称一致 var $dbtable; //数据表,要取得的节点 var $parser; //剖析器 var $vals; //属性 var $index; //索引 var $dbtable_array;//节点数组 var $array; //下级节点的数组 var $result; //返回的结果 var $querys; function xml($dbase,$dbtable){ $this->dbase=$dbase; $this- >dbname=”document”; $this- >dbtable=$dbtable; $data=$this- >ReadXml($this->dbase); if(!$data){ die( ”无法读取 $this->dbname.xml”); } $this- >parser = xml_parser_create(); xml_parser_set_option($this- >parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($this- >parser,XML_OPTION_SKIP_WHITE,1); xml_parse_into_struct($this- >parser,$data,$this->vals,$this->index); xml_parser_free($this- >parser); //遍历索引,筛选出要取值的节点 节点名:$dbtable foreach ($this- >index as $key=>$val) { if ($key == $this- >dbtable) { //取得节点数组 $this- >dbtable_array = $val; } else { continue; } } for ($i=0; $i < count($this->dbtable_array); $i+=2) { $offset = $this- >dbtable_array[$i] + 1; $len = $this- >dbtable_array[$i + 1] - $offset; //array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。 //所取节点下级数组 $value=array_slice($this- >vals,$offset,$len); //取得有效数组,合并为结果数组 $this- >array[]=$this->parseEFF($value); } return true; } //将XML文件读入并返回字符串 function ReadXml($file) { return file_get_contents($file); } //取得有效数组 function parseEFF($effective) { for ($i=0; $i < count($effective); $i++){ $effect[$effective[$i][ "tag"]] = $effective[$i]["value"]; } return $effect; } //xml_query(方法,条件,多条件时逻辑运算符and or or,总数据数组,插入或更新的数组) function xml_query($method,$condition,$if=’and’,$array=array()) { if(($method==’select’)||($method==’count’)){ return $this- >xml_select($method,$condition,$if); } elseif($method==’insert’) { return $this- >xml_insert($condition,$if,$array); } elseif($method==’update’) { return $this- >xml_update($condition,$if,$array); } } //取得xml数组 function xml_fetch_array($condition,$if) { //$this- >querys++; $row = $this- >array; //初始化数据数组 if($condition) { //是否有条件,如有条件则生成符合条件的数组 //生成条件数组,条件格式 field,operator,match $condition=explode( ”,”,$condition);//条件数组 $cs=count($condition)/3; //条件数 for($i=0;$i <$cs;$i++){ $conditions[]=array( ”field”=>$condition[$i*3],”operator”=>$condition[$i*3+1],”match”=>$condition[$i*3+2]); } //echo count($row); for($r=0;$r <count($row);$r++){ for($c=0;$c <$cs;$c++){ //$i++; $condition=$conditions[$c]; //当前条件 $field=$condition['field']; //字段 $operator=$condition[ "operator"];//运算符 $match=$condition['match']; //匹配 if(($operator==’=') &&($row[$r][$field]==$match)){ $true++;//若条件符合,符合数加1 } elseif(($operator==’!=’) &&($row[$r][$field]!=$match)){ $true++;//若条件符合,符合数加1 } elseif(($operator==’ <’)&&($row[$r][$field]<$match)){ $true++;//若条件符合,符合数加1 } elseif(($operator==’ <=’)&&($row[$r][$field]<=$match)){ $true++;//若条件符合,符合数加1 } elseif(($operator==’ >’)&&($row[$r][$field]>$match)){ $true++;//若条件符合,符合数加1 } elseif(($operator==’ >’)&&($row[$r][$field]>=$match)){ $true++;//若条件符合,符合数加1 } } //根据条件取值 if($if==’and’){ //如果多条件为and,当符合数等于条件数时,生成数组 if($true==$cs){ $result[]=$row[$r]; } } else { //如果多条件为or,当有符合纪录时,生成数组 if($true!=0){ $result[]=$row[$r]; } } //echo $true; //echo ”<pre style=\”font-size:12px;\text-align:left\”>”; //print_r($true); $true=0;//符合条件数归零,进入下一轮循环 } } else { $result=$this- >array; } //echo ”<pre style=\”font-size:12px;\text-align:left\”>”; //print_r($this- >result); return $result; } //筛选或统计 function xml_select($method,$condition,$if) { $result=$this- >xml_fetch_array($condition,$if); if($method==’select’){ return $result; } else { return count($result); } } //插入数据 function xml_insert($condition,$if,$array) { $data=$this- >xml_fetch_array($condition,$if);//总数据数组 $data[]=$array; //插入后的总数据数组 $this- >array=$data; //更新总数组 $this- >WriteXml($data); } //得到更新的XML并改写 function xml_update($condition,$if,$array){ $datas=$this- >array; //总数据数组 $subtract=$this- >xml_fetch_array($condition,$if);//要更新的数组 //echo ”<pre style=\”font-size:12px;\text-align:left\”>”; //print_r($data); //print_r($datas); //echo ”每条记录中有“.count($datas[0]).”个值<br>”; for($i=0;$i <count($datas);$i++){ $data=$datas[$i]; //echo ”原始记录中的第“.$i.”条<br>”; foreach($data as $k= >$v){ //echo ”-第“.$i.”条的“.$k.”值为“.$v.”<br>”; //echo ”–要查找的数组“.$k.”值为“.$subtract[0][$k].”<br>”; if($v==$subtract[0][$k]){ $is++; } } if($is==count($data)){ //echo ”—-与第“.$i.”条符合<br>”; $datas[$i]=$array; //array_splice($datas,$i,$i+1); } //echo ”原始记录中的第“.$i.”条与要查找的有“.$is.”匹配<br>”; //echo ”原始记录中的第“.$i.”条结束<br>”; $is=0; } //array_splice($datas,2,2+1,$array); //echo ”<pre style=\”font-size:12px;\text-align:left\”>”; //print_r($datas); $this- >array=$datas; $this- >WriteXml($datas); } //写入XML文件(全部写入) function WriteXml($array) { if(!is_writeable($this- >dbase)){ die( ”无法写入“.$this->dbname.”.xml”); } $xml.= ”<?xml version=\”1.0\” encoding=\”gb2312\”?>\r\n”; $xml.= ”<$this->dbname>\r\n”; for($i=0;$i <count($array);$i++){ $xml.= ”<$this->dbtable>\r\n”; foreach($array[$i] as $k= >$s){ $xml.= ”<$k>$s</$k>\r\n”; } $xml.= ”</$this->dbtable>\r\n”; } $xml.= ”</$this->dbname>”; dbase,”w’>$fp=@fopen($this->dbase,”w”); flock($fp, LOCK_EX); rewind($fp); fputs($fp,$xml); fclose($fp); } //逐行写入xml(我试着写入10000行,感觉没一次写入快,所以没用这种写入方式) function WriteLine($array) { if(!is_writeable($this- >dbase)){ die( ”无法写入“.$this->dbname.”.xml”); } dbase,”w’>$fp=@fopen($this->dbase,”w”); rewind($fp); flock($fp, LOCK_EX); fputs($fp, ”<?xml version=\”1.0\” encoding=\”gb2312\”?>\r\n”); fputs($fp, ”<$this->dbname>\r\n”); for($i=0;$i <count($array);$i++){ fputs($fp, ”<$this->dbtable>\r\n”); $xml.= ”<$this->dbtable>\r\n”; foreach($array[$i] as $k= >$s){ fputs($fp, ”<$k>$s</$k>\r\n”); } fputs($fp, ”</$this->dbtable>\r\n”); } fputs($fp, ”</$this->dbname>”); fclose($fp); } } ?> |
使用方法:
插入一条记录
代码如下 | 复制代码 |
require_once(‘xml.class.php’); $xml = new xml(“exemple.xml”,”item”); $newarray = array( “title”=>”XML标题“, “text”=>”PHP的XML类测试!“ ); $insert=$xml->xml_query(‘insert’,”,”,$newarray);//第二及第三个变量位置是条件,留空表示在最后插入 修改记录 require_once(‘xml.class.php’); $xml = new xml(“exemple.xml”,”item”); $array = array( “title”=>”XML标题“, “text”=>”PHP的XML类测试!“ ); |
$insert=$xml->xml_query(‘update’,'title,=,20年后世界将会怎样?‘,’and’,$array);//title标签等于xxx的用$array替换(可以建唯一属性的标签,比如id,这样就可以修改某一条记录)
删除记录
代码如下 | 复制代码 |
require_once(‘xml.class.php’); $xml = new xml(“exemple.xml”,”item”); $array = array(); $insert=$xml->xml_query(‘update’,'title,=,20年后世界将会怎样?‘,’and’,$array);//数组留空 |
备注
删除时其实是把值变空,我们可以修改一下xml_update(),在生成xml文件之前先判断$array的值,如果值为空就不写入到最终的数组中就是删除的效果了。
写入xml文件时速度粉快(我测试过30000条记录的情况),插入时只插入一条记录,修改速度也相当的快,挺适合中型网站生成XML时使用,所以推荐一下。
PHP如何读取xml文件?有不少朋友不知道这个问题,其实php对于xml文档是有专门的函数来操作了,下面我们就来举几个php读取xml例子希望能给各位带来帮助。一,什么是xml,xml有什么用途
XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
XML的用途很多,可以用来存储数据,可以用来做数据交换,为很多种应用软件提示数据等等。
二,php读取xml的方法
xml源文件
代码如下 | 复制代码 |
<?xml version="1.0 encoding="UTF-8"?> |
2)simplexml读取xml
代码如下 | 复制代码 |
<?php $xml_array=simplexml_load_file('person.xml'); //将XML中的数据,读取到数组对象中 foreach($xml_array as $tmp){ echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>"; } ?> 如果你使用 curl 获取的 xml data $xml = simplexml_load_string($data); $data['tk'] = json_decode(json_encode($xml),TRUE); 如果是直接获取 URL 数据的话 $xml = simplexml_load_file($data); $data['tk'] = json_decode(json_encode($xml),TRUE); |
先把 simplexml 对象转换成 json,再将 json 转换成数组。
3)用php正则表达式来记取数据
代码如下 | 复制代码 |
<?php $xml = ""; $f = fopen('person.xml', 'r'); while( $data = fread( $f, 4096 ) ) { $xml .= $data; } fclose( $f ); // 上面读取数据 preg_match_all( "/\<humans\>(.*?)\<\/humans\>/s", $xml, $humans ); //匹配最外层标签里面的内容 foreach( $humans[1] as $k=>$human ) { preg_match_all( "/\<name\>(.*?)\<\/name\>/", $human, $name ); //匹配出名字 preg_match_all( "/\<sex\>(.*?)\<\/sex\>/", $human, $sex ); //匹配出性别 preg_match_all( "/\<old\>(.*?)\<\/old\>/", $human, $old ); //匹配出年龄 } foreach($name[1] as $key=>$val){ echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ; } ?> |
4)xmlreader来读取xml数据
代码如下 | 复制代码 |
<?php $reader = new XMLReader(); $reader->open('person.xml'); //读取xml数据 $i=1; while ($reader->read()) { //是否读取 if ($reader->nodeType == XMLReader::TEXT) { //判断node类型 if($i%3){ echo $reader->value; //取得node的值 }else{ echo $reader->value."<br>" ; } $i++; } } ?> |
三,小结
读取xml的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,张映.但是他们的测重点不同,前三种方法的读取xml的function的设计重点,是为了读取标签中的值,相当于jquery中的text()方法,而xmlreader呢他就不太一样,他的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为xml文件已经给定了,我就不想在搞xml文件出来了)。
举个例子解释一下,
代码如下 | 复制代码 |
<data name=’张映’ sex=’男’ old=’28′></data> |
xmlreader的设计重点是为了读data里面的name sex old的值,而读取的内容就比较麻烦了。他相当于jquery中attr(”);这个东西。
相关文章
- 安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
- 一、常量常量是一个简单值的标识符(名字)。如同其名称所暗示的,在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量)。常量默认为大小写敏感。按照惯例常量标识符总是大写的。 常量名和其它任何 PHP 标签遵循...2015-10-30
- 这篇文章主要介绍了JavaScript预解析,对象的的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...2021-11-10
- 复制代码 代码如下:$nodes = @$xpath->query("//*[@id='main_pr']/img/@src");$prurl = $nodes->item(0)->nodeValue;...2013-10-04
- floor会产生小数了如果我们不希望有小数我们是可以去除小数点的了,下面一聚教程小编来为各位介绍php使用floor去掉小数点的例子,希望对各位有帮助。 float floor (...2016-11-25
- 这篇文章主要介绍了C# 如何解析获取Url参数值,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-09-01
error LNK2019: 无法解析的外部符号 问题的解决办法
error LNK2019: 无法解析的外部符号 问题的解决办法,需要的朋友可以参考一下...2020-04-25- 这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
- 这篇文章主要介绍了JavaScript实现解析INI文件内容的方法,结合实例形式分析了javascript通过自定义函数实现针对ini文件解析操作的相关处理技巧,需要的朋友可以参考下...2016-11-22
- 这篇文章主要介绍了C#网络请求与JSON解析的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 最近在创建一个servlet时,自动生成的代码中出现servlet无法解析的提示,令我无法正常使用servlet里的方法,在对各个步骤进行查看后,发现了问题所在,需要的朋友可以参考下...2021-05-15
- Redis 是一个高性能的key-value数据库。在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端使用很方便...2021-06-17
- XPath构建于XML之上,以表示路径的方式来确定XML中元素位置,事实上并不是太常用,这里我们来简单了解JavaScript操作XPath的一些基本方法...2016-06-12
- 下面我们来看一篇关于纯Css实现下拉菜单的简单例子,希望这篇文章能够给各位同学带来帮助,具体步骤如下. 大家可能会经常用到hover这属性,用hover实现鼠标经过的颜...2017-01-22
- 这篇文章主要介绍了C#域名解析简单实现方法,可实现针对域名解析显示出主机名、IP地址、别名等功能,需要的朋友可以参考下...2020-06-25
- C# 2.0 中还引入了可空类型,可空类型也是值类型,只是可空类型是包括null的值类型的,下面就介绍下C#2.0中对可空类型的支持具体有哪些内容...2020-06-25
- 这篇文章主要介绍了Intellij IDEA解析jacoco结果文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-25
基于xpath选择器、PyQuery、正则表达式的格式清理工具详解
这篇文章主要介绍了基于xpath选择器、PyQuery、正则表达式的格式清理工具,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-07python之pyinstaller组件打包命令和异常解析实战
前段时间在制作小工具的时候,直接在命令行用pyinstaller工具打包成功后,启动exe可执行文件的时候各种报错, 今天,我们就分享一下踩坑经过,需要的朋友可以参考下...2021-09-20- 在php中日期对比用得比较多了,还有一个日期加减也用到不少,下面我拿两个例子来给大家介绍在php中日期操作方法吧,希望文章能给你带来帮助 功能需求 文章发布时段操...2016-11-25