Maison php教程 php手册 用php5轻松解析xml

用php5轻松解析xml

Jun 21, 2016 am 09:06 AM
gt lt name this

php5|xml

用sax方式的时候,要自己构建3个函数, 而且要直接用这三的函数来返回数据, 要求较强的逻辑. 在处理不同结构的xml的时候, 还要重新进行构造这三个函数,麻烦!

用dom方式,倒是好些,但是他把每个节点都看作是一个node, 操作起来要写好多的代码, 麻烦!

网上有好多的开源的xml解析的类库, 以前看过几个, 但是心里总是觉得不踏实, 感觉总是跟在别人的屁股后面.

这几天在搞java, 挺累的, 所以决定换换脑袋, 写点php代码, 为了防止以后xml解析过程再令我犯难, 就花了一天的时间写了下面一个xml解析的类, 于是就有了下面的东西,

实现方式是通过包装"sax方式的解析结果"来实现的. 总的来说,对于我个人来说挺实用的,性能也还可以,基本上可以完成大多数的处理要求。

功能:
1\ 对基本的xml文件的节点进行 查询 / 添加 / 修改 / 删除 工作.
2\ 导出xml文件的所有数据到一个数组里面.
3\ 整个设计采用了oo方式,在操作结果集的时候, 使用方法类似于dom

缺点:
1\ 每个节点最好都带有一个id(看后面的例子), 每个“节点名字”=“节点的标签_节点的id”,如果这个id值没有设置,程序将自动给他产生一个id,这个id就是这个节点在他的上级节点中的位置编号,从0开始。
2\ 查询某个节点的时候可以通过用“|”符号连接“节点名字”来进行。这些“节点名字”都是按顺序写好的上级节点的名字。

使用说明:
运行下面的例子,在执行结果页面上可以看到函数的使用说明

代码是通过php5来实现的,在php4中无法正常运行。

由于刚刚写完,所以没有整理文档,下面的例子演示的只是一部分的功能,代码不是很难,要是想知道更多的功能,可以研究研究源代码。

目录结构:

      test.php      test.xml      xml / SimpleDocumentBase.php      xml / SimpleDocumentNode.php      xml / SimpleDocumentRoot.php      xml / SimpleDocumentParser.php
Copier après la connexion
文件:test.xml
<?xml version="1.0" encoding="GB2312"?><br><shop><br> <name>华联</name><br> <address>北京长安街-9999号</address>
<br> <desc>连锁超市</desc><br> <cat id="food"><br>  <goods id="food11"><br>   <name>food11</name><br>   <price>12.90</price><br>  </goods><br>  <goods id="food12"><br>   <name>food12</name><br>   <price>22.10</price><br>   <desc creator="hahawen">好东西推荐</desc><br>  </goods><br> </cat><br> <cat><br>  <goods id="tel21"><br>   <name>tel21</name><br>   <price>1290</price><br>  </goods><br> </cat><br> <cat id="coat"><br>  <goods id="coat31"><br>   <name>coat31</name><br>   <price>112</price><br>  </goods><br>  <goods id="coat32"><br>   <name>coat32</name><br>   <price>45</price><br>  </goods><br> </cat><br> <special id="hot"><br>  <goods><br>   <name>hot41</name><br>   <price>99</price><br>  </goods><br> </special><br></shop>
Copier après la connexion
文件:test.php
<?php 
Copier après la connexion

require_once "xml/SimpleDocumentParser.php";
require_once "xml/SimpleDocumentBase.php";
require_once "xml/SimpleDocumentRoot.php";
require_once "xml/SimpleDocumentNode.php";

$test = new SimpleDocumentParser();
$test->parse("test.xml");
$dom = $test->getSimpleDocument();

echo "

";<p>echo "</p><hr><font color="red">";<br>echo "下面是通过函数getSaveData()返回的整个xml数据的数组";<br>echo "</font><hr>";<br>print_r($dom->getSaveData());<p>echo "</p><hr><font color="red">";<br>echo "下面是通过setValue()函数,给给根节点添加信息,添加后显示出结果xml文件的内容";<br>echo "</font><hr>";<br>$dom->setValue("telphone", "123456789");<br>echo htmlspecialchars($dom->getSaveXml());<p>echo "</p><hr><font color="red">";<br>echo "下面是通过getNode()函数,返回某一个分类下的所有商品的信息";<br>echo "</font><hr>";<br>$obj = $dom->getNode("cat_food");<br>$nodeList = $obj->getNode();<br>foreach($nodeList as $node){<br>$data = $node->getValue();<br>echo "<font color="red">商品名:".$data[name]."</font><br>";<br>print_R($data);<br>print_R($node->getAttribute());<br>}<p>echo "</p><hr><font color="red">";<br>echo "下面是通过findNodeByPath()函数,返回某一商品的信息";<br>echo "</font><hr>";<br>$obj = $dom->findNodeByPath("cat_food|goods_food11");<br>if(!is_object($obj)){<br>echo "该商品不存在";<br>}else{<br>$data = $obj->getValue();<br>echo "<font color="red">商品名:".$data[name]."</font><br>";<br>print_R($data);<br>print_R($obj->getAttribute());<br>}<p>echo "</p><hr><font color="red">";<br>echo "下面是通过setValue()函数,给商品\"food11\"添加属性, 然后显示添加后的结果";<br>echo "</font><hr>";<br>$obj = $dom->findNodeByPath("cat_food|goods_food11");<br>$obj->setValue("leaveword", array("value"=>"这个商品不错", "attrs"=>array("author"=>"hahawen", "date"=>date('Y-m-d'))));<br>echo htmlspecialchars($dom->getSaveXml());<p>echo "</p><hr><font color="red">";<br>echo "下面是通过removeValue()/removeAttribute()函数,给商品\"food11\"改变和删除属性, 然后显示操作后的结果";<br>echo "</font><hr>";<br>$obj = $dom->findNodeByPath("cat_food|goods_food12");<br>$obj->setValue("name", "new food12");<br>$obj->removeValue("desc");<br>echo htmlspecialchars($dom->getSaveXml());<p>echo "</p><hr><font color="red">";<br>echo "下面是通过createNode()函数,添加商品, 然后显示添加后的结果";<br>echo "</font><hr>";<br>$obj = $dom->findNodeByPath("cat_food");<br>$newObj = $obj->createNode("goods", array("id"=>"food13"));<br>$newObj->setValue("name", "food13");<br>$newObj->setValue("price", 100);<br>echo htmlspecialchars($dom->getSaveXml());<p>echo "</p><hr><font color="red">";<br>echo "下面是通过removeNode()函数,删除商品, 然后显示删除后的结果";<br>echo "</font><hr>";<br>$obj = $dom->findNodeByPath("cat_food");<br>$obj->removeNode("goods_food12");<br>echo htmlspecialchars($dom->getSaveXml());<br>?> <pre class="brush:php;toolbar:false">
Copier après la connexion
文件:SimpleDocumentParser.php
<?php /** *========================================================= * * @author     hahawen(大龄青年)   * @since      2004-12-04 * @copyright  Copyright (c) 2004, NxCoder Group * *========================================================= *//** * class SimpleDocumentParser * use SAX parse xml file, and build SimpleDocumentObject * all this pachage's is work for xml file, and method is action as DOM. * * @package SmartWeb.common.xml * @version 1.0 */class SimpleDocumentParser{ private $domRootObject = null; private $currentNO = null; private $currentName = null; private $currentValue = null; private $currentAttribute = null; public function getSimpleDocument() {     return $this->domRootObject; } public function parse($file) {        $xmlParser = xml_parser_create();     xml_parser_set_option($xmlParser,XML_OPTION_CASE_FOLDING, 0);     xml_parser_set_option($xmlParser,XML_OPTION_SKIP_WHITE, 1);     xml_parser_set_option($xmlParser, XML_OPTION_TARGET_ENCODING, 'UTF-8');     xml_set_object($xmlParser, $this);     xml_set_element_handler($xmlParser, "startElement", "endElement");     xml_set_character_data_handler($xmlParser, "characterData");        if (!xml_parse($xmlParser, file_get_contents($file)))            die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xmlParser)), xml_get_current_line_number($xmlParser)));     xml_parser_free($xmlParser); } private function startElement($parser, $name, $attrs) {        $this->currentName = $name;        $this->currentAttribute = $attrs;        if($this->currentNO == null)        {         $this->domRootObject = new SimpleDocumentRoot($name);         $this->currentNO = $this->domRootObject;        }        else        {         $this->currentNO = $this->currentNO->createNode($name, $attrs);        } }    private function endElement($parser, $name)    {        if($this->currentName==$name)        {         $seq = $this->currentNO->getSeq();
         $this->currentNO = $this->currentNO->getPNodeObject();
         $tag = $this->currentNO->getNodeName($seq);
Copier après la connexion
         if($this->currentAttribute!=null && sizeof($this->currentAttribute)>0)          $this->currentNO->setValue($name, array('value'=>$this->currentValue, 'attrs'=>$this->currentAttribute));         else                $this->currentNO->setValue($name, $this->currentValue);            $this->currentNO->removeNode($tag);        }        else        {      $this->currentNO = (is_a($this->currentNO, 'SimpleDocumentRoot'))? null: $this->currentNO->getPNodeObject();        } } private function characterData($parser, $data) {        $this->currentValue = iconv('UTF-8', 'GB2312', $data); } function __destruct() {     unset($this->domRootObject); }}?>
Copier après la connexion
文件:SimpleDocumentBase.php
<?php /** *========================================================= * * @author     hahawen(大龄青年)   * @since      2004-12-04 * @copyright  Copyright (c) 2004, NxCoder Group * *========================================================= *//** * abstract class SimpleDocumentBase * base class for xml file parse * all this pachage's is work for xml file, and method is action as DOM. * * 1\ add/update/remove data of xml file. * 2\ explode data to array. * 3\ rebuild xml file * * @package SmartWeb.common.xml * @abstract * @version 1.0 */abstract class SimpleDocumentBase{ private $nodeTag = null; private $attributes = array(); private $values = array(); private $nodes = array();    function __construct($nodeTag)    {        $this->nodeTag = $nodeTag;    }    public function getNodeTag()    {     return $this->nodeTag;    }    public function setValues($values){     $this->values = $values;    }    public function setValue($name, $value)    {     $this->values[$name] = $value;    }    public function getValue($name=null)    {     return $name==null? $this->values: $this->values[$name];    }    public function removeValue($name)    {     unset($this->values["$name"]);    }    public function setAttributes($attributes){        $this->attributes = $attributes;    }    public function setAttribute($name, $value)    {     $this->attributes[$name] = $value;    }    public function getAttribute($name=null)    {        return $name==null? $this->attributes: $this->attributes[$name];    }    public function removeAttribute($name)    {     unset($this->attributes["$name"]);    }    public function getNodesSize()    {        return sizeof($this->nodes);    }    protected function setNode($name, $nodeId)    {     $this->nodes[$name] = $nodeId;    }    public abstract function createNode($name, $attributes);    public abstract function removeNode($name);    public abstract function getNode($name=null);    protected function getNodeId($name=null)    {     return $name==null? $this->nodes: $this->nodes[$name];    }
Copier après la connexion
    public function getNodeName($id)<br>    {<br>     $tmp = array_flip($this->nodes);<br>     return $tmp[$id];<br>    }    protected function createNodeByName($rootNodeObj, $name, $attributes, $pId)    {        $tmpObject = $rootNodeObj->createNodeObject($pId, $name, $attributes);        $key = isset($attributes[id])? $name.'_'.$attributes[id]: $name.'_'.$this->getNodesSize();        $this->setNode($key, $tmpObject->getSeq());     return $tmpObject;    }    protected function removeNodeByName($rootNodeObj, $name)    {        $rootNodeObj->removeNodeById($this->getNodeId($name));        if(sizeof($this->nodes)==1)            $this->nodes = array();     else      unset($this->nodes[$name]);    }    protected function getNodeByName($rootNodeObj, $name=null)    {     if($name==null)     {            $tmpList = array();            $tmpIds = $this->getNodeId();            foreach($tmpIds as $key=>$id)             $tmpList[$key] = $rootNodeObj->getNodeById($id);            return $tmpList;     }     else     {      $id = $this->getNodeId($name);      if($id===null)      {             $tmpIds = $this->getNodeId();             foreach($tmpIds as $tkey=>$tid)             {              if(strpos($key, $name)==0)              {               $id = $tid;               break;              }             }      }      return $rootNodeObj->getNodeById($id);     }    }    public function findNodeByPath($path)    {     $pos = strpos($path, '|');     if($posgetNode($path);        }        else        {         $tmpObj = $this->getNode(substr($path, 0, $pos));         return is_object($tmpObj)? $tmpObj->findNodeByPath(substr($path, $pos+1)): null;        }    }    public function getSaveData()    {        $data = $this->values;        if(sizeof($this->attributes)>0)         $data[attrs] = $this->attributes;        $nodeList = $this->getNode();        if($nodeList==null)         return $data;        foreach($nodeList as $key=>$node)        {         $data[$key] = $node->getSaveData();        }     return $data;    }    public function getSaveXml($level=0)    {     $prefixSpace = str_pad("", $level, "\t");     $str = "$prefixSpacenodeTag";        foreach($this->attributes as $key=>$value)         $str .= " $key=\"$value\"";        $str .= ">\r\n";        foreach($this->values as $key=>$value){            if(is_array($value))            {                $str .= "$prefixSpace\t$attvalue)                 $str .= " $attkey=\"$attvalue\"";                $tmpStr = $value[value];            }            else            {             $str .= "$prefixSpace\t\r\n": ">$tmpStr$key>\r\n";        }        foreach($this->getNode() as $node)         $str .= $node->getSaveXml($level+1)."\r\n";     $str .= "$prefixSpace$this->nodeTag>";     return $str;    }    function __destruct()    {     unset($this->nodes, $this->attributes, $this->values);    }}?>
Copier après la connexion
文件:SimpleDocumentRoot.php
<?php /** *========================================================= * * @author     hahawen(大龄青年)   * @since      2004-12-04 * @copyright  Copyright (c) 2004, NxCoder Group * *========================================================= *//** * class SimpleDocumentRoot * xml root class, include values/attributes/subnodes. * all this pachage's is work for xml file, and method is action as DOM. * * @package SmartWeb.common.xml * @version 1.0 */class SimpleDocumentRoot extends SimpleDocumentBase{ private $prefixStr = ''; private $nodeLists = array(); function __construct($nodeTag) {        parent::__construct($nodeTag); }    public function createNodeObject($pNodeId, $name, $attributes)    {     $seq = sizeof($this->nodeLists);     $tmpObject = new SimpleDocumentNode($this, $pNodeId, $name, $seq);     $tmpObject->setAttributes($attributes);     $this->nodeLists[$seq] = $tmpObject;     return $tmpObject;    }    public function removeNodeById($id)    {        if(sizeof($this->nodeLists)==1)            $this->nodeLists = array();     else      unset($this->nodeLists[$id]);    }    public function getNodeById($id)    {     return $this->nodeLists[$id];    }    public function createNode($name, $attributes)    {        return $this->createNodeByName($this, $name, $attributes, -1);    }    public function removeNode($name)    {        return $this->removeNodeByName($this, $name);    }    public function getNode($name=null)    {        return $this->getNodeByName($this, $name);    }    public function getSaveXml()    {     $prefixSpace = "";     $str = $this->prefixStr."\r\n";     return $str.parent::getSaveXml(0);    }}?>
Copier après la connexion
文件:SimpleDocumentNode.php
<?php /** *========================================================= * * @author     hahawen(大龄青年)   * @since      2004-12-04 * @copyright  Copyright (c) 2004, NxCoder Group * *========================================================= *//** * class SimpleDocumentNode * xml Node class, include values/attributes/subnodes. * all this pachage's is work for xml file, and method is action as DOM. * * @package SmartWeb.common.xml * @version 1.0 */class SimpleDocumentNode extends SimpleDocumentBase{ private $seq = null; private $rootObject = null;    private $pNodeId = null;    function __construct($rootObject, $pNodeId, $nodeTag, $seq)    {     parent::__construct($nodeTag);        $this->rootObject = $rootObject;        $this->pNodeId = $pNodeId;        $this->seq = $seq;    }    public function getPNodeObject()    {     return ($this->pNodeId==-1)? $this->rootObject: $this->rootObject->getNodeById($this->pNodeId);    }    public function getSeq(){     return $this->seq;    }    public function createNode($name, $attributes)    {        return $this->createNodeByName($this->rootObject, $name, $attributes, $this->getSeq());    }    public function removeNode($name)    {        return $this->removeNodeByName($this->rootObject, $name);    }    public function getNode($name=null)    {        return $this->getNodeByName($this->rootObject, $name);    }}?>
Copier après la connexion
下面是例子运行对结果:
<hr><font color="red">下面是通过函数getSaveData()返回的整个xml数据的数组</font><hr>Array(    [name] => 华联    [address] => 北京长安街-9999号    [desc] => 连锁超市    [cat_food] => Array        (            [attrs] => Array                (                    [id] => food                )            [goods_food11] => Array                (                    [name] => food11                    [price] => 12.90                    [attrs] => Array                        (                            [id] => food11                        )                )            [goods_food12] => Array                (                    [name] => food12                    [price] => 22.10                    [desc] => Array                        (                            [value] => 好东西推荐                            [attrs] => Array                                (                                    [creator] => hahawen                                )                        )                    [attrs] => Array                        (                            [id] => food12                        )                )        )    [cat_1] => Array        (            [goods_tel21] => Array                (                    [name] => tel21                    [price] => 1290                    [attrs] => Array                        (                            [id] => tel21                        )                )        )    [cat_coat] => Array        (            [attrs] => Array                (                    [id] => coat                )            [goods_coat31] => Array                (                    [name] => coat31                    [price] => 112                    [attrs] => Array                        (                            [id] => coat31                        )                )            [goods_coat32] => Array                (                    [name] => coat32                    [price] => 45                    [attrs] => Array                        (                            [id] => coat32                        )                )        )    [special_hot] => Array        (            [attrs] => Array                (                    [id] => hot                )            [goods_0] => Array                (                    [name] => hot41                    [price] => 99                )        ))<hr><font color="red">下面是通过setValue()函数,给给根节点添加信息,添加后显示出结果xml文件的内容</font><hr><?xml version="1.0" encoding="GB2312" ?><shop> <name>华联</name> <address>北京长安街-9999号</address> <desc>连锁超市</desc> <telphone>123456789</telphone> <cat id="food">  <goods id="food11">   <name>food11</name>   <price>12.90</price>  </goods>  <goods id="food12">   <name>food12</name>   <price>22.10</price>   <desc creator="hahawen">好东西推荐</desc>  </goods> </cat> <cat>  <goods id="tel21">   <name>tel21</name>   <price>1290</price>  </goods> </cat> <cat id="coat">  <goods id="coat31">   <name>coat31</name>   <price>112</price>  </goods>  <goods id="coat32">   <name>coat32</name>   <price>45</price>  </goods> </cat> <special id="hot">  <goods>   <name>hot41</name>   <price>99</price>  </goods> </special></shop><hr><font color="red">下面是通过getNode()函数,返回某一个分类下的所有商品的信息</font><hr><font color="red">商品名:food11</font><br>Array(    [name] => food11    [price] => 12.90)Array(    [id] => food11)<font color="red">商品名:food12</font><br>Array(    [name] => food12    [price] => 22.10    [desc] => Array        (            [value] => 好东西推荐            [attrs] => Array                (                    [creator] => hahawen                )        ))Array(    [id] => food12)<hr><font color="red">下面是通过findNodeByPath()函数,返回某一商品的信息</font><hr><font color="red">商品名:food11</font><br>Array(    [name] => food11    [price] => 12.90)Array(    [id] => food11)<hr><font color="red">下面是通过setValue()函数,给商品"food11"添加属性, 然后显示添加后的结果</font><hr><?xml version="1.0" encoding="GB2312" ?><shop> <name>华联</name> <address>北京长安街-9999号</address> <desc>连锁超市</desc> <telphone>123456789</telphone> <cat id="food">  <goods id="food11">   <name>food11</name>   <price>12.90</price>   <leaveword author="hahawen" date="2004-12-05">这个商品不错</leaveword>  </goods>  <goods id="food12">   <name>food12</name>   <price>22.10</price>   <desc creator="hahawen">好东西推荐</desc>  </goods> </cat> <cat>  <goods id="tel21">   <name>tel21</name>   <price>1290</price>  </goods> </cat> <cat id="coat">  <goods id="coat31">   <name>coat31</name>   <price>112</price>  </goods>  <goods id="coat32">   <name>coat32</name>   <price>45</price>  </goods> </cat> <special id="hot">  <goods>   <name>hot41</name>   <price>99</price>  </goods> </special></shop><hr><font color="red">下面是通过removeValue()/removeAttribute()函数,给商品"food11"改变和删除属性, 然后显示操作后的结果</font><hr><?xml version="1.0" encoding="GB2312" ?><shop> <name>华联</name> <address>北京长安街-9999号</address> <desc>连锁超市</desc> <telphone>123456789</telphone> <cat id="food">  <goods id="food11">   <name>food11</name>   <price>12.90</price>   <leaveword author="hahawen" date="2004-12-05">这个商品不错</leaveword>  </goods>  <goods id="food12">   <name>new food12</name>   <price>22.10</price>  </goods> </cat> <cat>  <goods id="tel21">   <name>tel21</name>   <price>1290</price>  </goods> </cat> <cat id="coat">  <goods id="coat31">   <name>coat31</name>   <price>112</price>  </goods>  <goods id="coat32">   <name>coat32</name>   <price>45</price>  </goods> </cat> <special id="hot">  <goods>   <name>hot41</name>   <price>99</price>  </goods> </special></shop><hr><font color="red">下面是通过createNode()函数,添加商品, 然后显示添加后的结果</font><hr><?xml version="1.0" encoding="GB2312" ?><shop> <name>华联</name> <address>北京长安街-9999号</address> <desc>连锁超市</desc> <telphone>123456789</telphone> <cat id="food">  <goods id="food11">   <name>food11</name>   <price>12.90</price>   <leaveword author="hahawen" date="2004-12-05">这个商品不错</leaveword>  </goods>  <goods id="food12">   <name>new food12</name>   <price>22.10</price>  </goods>  <goods id="food13">   <name>food13</name>   <price>100</price>  </goods> </cat> <cat>  <goods id="tel21">   <name>tel21</name>   <price>1290</price>  </goods> </cat> <cat id="coat">  <goods id="coat31">   <name>coat31</name>   <price>112</price>  </goods>  <goods id="coat32">   <name>coat32</name>   <price>45</price>  </goods> </cat> <special id="hot">  <goods>   <name>hot41</name>   <price>99</price>  </goods> </special></shop><hr><font color="red">下面是通过removeNode()函数,删除商品, 然后显示删除后的结果</font><hr><?xml version="1.0" encoding="GB2312" ?><shop> <name>华联</name> <address>北京长安街-9999号</address> <desc>连锁超市</desc> <telphone>123456789</telphone> <cat id="food">  <goods id="food11">   <name>food11</name>   <price>12.90</price>   <leaveword author="hahawen" date="2004-12-05">这个商品不错</leaveword>  </goods>  <goods id="food13">   <name>food13</name>   <price>100</price>  </goods> </cat> <cat>  <goods id="tel21">   <name>tel21</name>   <price>1290</price>  </goods> </cat> <cat id="coat">  <goods id="coat31">   <name>coat31</name>   <price>112</price>  </goods>  <goods id="coat32">   <name>coat32</name>   <price>45</price>  </goods> </cat> <special id="hot">  <goods>   <name>hot41</name>   <price>99</price>  </goods> </special></shop>
Copier après la connexion



Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les différences entre Huawei GT3 Pro et GT4 ? Quelles sont les différences entre Huawei GT3 Pro et GT4 ? Dec 29, 2023 pm 02:27 PM

De nombreux utilisateurs choisiront la marque Huawei lors du choix des montres intelligentes. Parmi eux, les Huawei GT3pro et GT4 sont des choix très populaires. De nombreux utilisateurs sont curieux de connaître la différence entre Huawei GT3pro et GT4. Quelles sont les différences entre Huawei GT3pro et GT4 ? 1. Apparence GT4 : 46 mm et 41 mm, le matériau est un miroir en verre + un corps en acier inoxydable + une coque arrière en fibre haute résolution. GT3pro : 46,6 mm et 42,9 mm, le matériau est du verre saphir + corps en titane/corps en céramique + coque arrière en céramique 2. GT4 sain : en utilisant le dernier algorithme Huawei Truseen5.5+, les résultats seront plus précis. GT3pro : ajout d'un électrocardiogramme ECG, d'un vaisseau sanguin et de la sécurité

Correctif : l'outil de capture ne fonctionne pas sous Windows 11 Correctif : l'outil de capture ne fonctionne pas sous Windows 11 Aug 24, 2023 am 09:48 AM

Pourquoi l'outil Snipping ne fonctionne pas sous Windows 11 Comprendre la cause première du problème peut aider à trouver la bonne solution. Voici les principales raisons pour lesquelles l'outil de capture peut ne pas fonctionner correctement : L'assistant de mise au point est activé : cela empêche l'ouverture de l'outil de capture. Application corrompue : si l'outil de capture plante au lancement, il est peut-être corrompu. Pilotes graphiques obsolètes : des pilotes incompatibles peuvent interférer avec l'outil de capture. Interférence provenant d'autres applications : d'autres applications en cours d'exécution peuvent entrer en conflit avec l'outil de capture. Le certificat a expiré : une erreur lors du processus de mise à niveau peut provoquer ce problème. Solution simple. Celles-ci conviennent à la plupart des utilisateurs et ne nécessitent aucune connaissance technique particulière. 1. Mettez à jour les applications Windows et Microsoft Store

Comment réparer l'erreur Impossible de se connecter à l'App Store sur iPhone Comment réparer l'erreur Impossible de se connecter à l'App Store sur iPhone Jul 29, 2023 am 08:22 AM

Partie 1 : étapes de dépannage initiales Vérification de l'état du système Apple : avant d'aborder des solutions complexes, commençons par les bases. Le problème ne vient peut-être pas de votre appareil ; les serveurs Apple sont peut-être en panne. Visitez la page État du système d'Apple pour voir si l'AppStore fonctionne correctement. S'il y a un problème, tout ce que vous pouvez faire est d'attendre qu'Apple le résolve. Vérifiez votre connexion Internet : assurez-vous que vous disposez d'une connexion Internet stable, car le problème "Impossible de se connecter à l'AppStore" peut parfois être attribué à une mauvaise connexion. Essayez de basculer entre le Wi-Fi et les données mobiles ou de réinitialiser les paramètres réseau (Général > Réinitialiser > Réinitialiser les paramètres réseau > Paramètres). Mettez à jour votre version iOS :

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Watch4pro est-il meilleur ou gt ? Watch4pro est-il meilleur ou gt ? Sep 26, 2023 pm 02:45 PM

Watch4pro et gt ont chacun des fonctionnalités et des scénarios applicables différents. Si vous vous concentrez sur des fonctions complètes, des performances élevées et une apparence élégante, et que vous êtes prêt à supporter un prix plus élevé, alors Watch 4 Pro peut être plus approprié. Si vous n’avez pas d’exigences fonctionnelles élevées et que vous accordez plus d’attention à la durée de vie de la batterie et à un prix raisonnable, la série GT peut être plus adaptée. Le choix final doit être décidé en fonction des besoins personnels, du budget et des préférences. Il est recommandé d'examiner attentivement vos propres besoins avant d'acheter et de vous référer aux critiques et aux comparaisons des différents produits pour faire un choix plus éclairé.

Comment optimiser la durée de vie de la batterie de l'iPad avec iPadOS 17.4 Comment optimiser la durée de vie de la batterie de l'iPad avec iPadOS 17.4 Mar 21, 2024 pm 10:31 PM

Comment optimiser la durée de vie de la batterie de l'iPad avec iPadOS 17.4 L'extension de la durée de vie de la batterie est la clé de l'expérience des appareils mobiles, et l'iPad en est un bon exemple. Si vous avez l'impression que la batterie de votre iPad se décharge trop rapidement, ne vous inquiétez pas, il existe un certain nombre d'astuces et d'ajustements dans iPadOS 17.4 qui peuvent prolonger considérablement la durée de fonctionnement de votre appareil. L'objectif de ce guide détaillé n'est pas seulement de fournir des informations, mais aussi de changer la façon dont vous utilisez votre iPad, d'améliorer la gestion globale de votre batterie et de garantir que vous pouvez compter sur votre appareil plus longtemps sans avoir à le charger. En adoptant les pratiques décrites ici, vous faites un pas vers une utilisation plus efficace et plus consciente de la technologie, adaptée à vos besoins individuels et à vos modèles d'utilisation. Identifier les grands consommateurs d’énergie

Microsoft déploie la version Windows 11 23H2 sur le canal de prévisualisation des versions avec Copilot Microsoft déploie la version Windows 11 23H2 sur le canal de prévisualisation des versions avec Copilot Sep 28, 2023 pm 07:17 PM

Tout le monde attend avec impatience la version actuelle de Windows 1123H2. En fait, Microsoft vient de lancer des mises à jour de l'aperçu de la version, qui est le canal le plus proche avant la phase de sortie officielle. Connu sous le nom de Build 22631, Microsoft annonce le déploiement de la nouvelle application de chat renommée, des widgets Phone Links et Play Together qui ont été testés sur d'autres canaux internes au cours des derniers mois. "Cette nouvelle mise à jour aura la même branche de maintenance et la même base de code que Windows 11 version 22H2 et sera cumulative avec toutes les fonctionnalités nouvellement annoncées, y compris Copilot dans Windows (aperçu)", promet Microsoft. Les responsables de Redmond plus loin

Comment utiliser cette méthode en Java Comment utiliser cette méthode en Java Apr 18, 2023 pm 01:58 PM

1. ce mot-clé 1. Type de ceci : L'objet appelé est le type de référence de cet objet 2. Résumé de l'utilisation 1. this.data;//Attribut d'accès 2. this.func();//Méthode d'accès 3.this ( );//Appelez d'autres constructeurs de cette classe 3. Explication de l'utilisation 1.this.data est utilisé dans les méthodes membres. Voyons ce qui se passera si cela n'est pas ajouté classMyDate{publicintyear;publicintmonth;publicintday; intmois,intjour){oui

See all articles