php学习之json And xml

    xiaoxiao2021-04-11  30

    php学习之json And xml

                最近在学习php的相关知识,作为Android开发人员,我们与后台交互数据的时候接触的比较多的就是json格式的数据,同时也会接触一些xml类型的数据,对于json类型的数据我们是比较接受的,json类型的数据有工具类提供给我们解析获取数据,但是xml就会相比较麻烦些。处于好奇自己在学习php,今天正好学习到了php关于json的讲解。同时自己也找了xml的相关的知识。先来分享下json的操作。         在php5.2.0及以上版本已经内置了json扩展。json也很简单,一共就三个函数:     json_encode 对变量进行 JSON 编码json_decode对 JSON 格式的字符串进行解码,转换为 PHP 变量json_last_error返回最后发生的错误         PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。在这里贴一个短小的代码自己体会下: $arr = array('name'=>'green','age'=>28,'gender'=>'man','work'=>'develop'); echo json_encode($arr); echo '<br>'; class Emp{ public $name = ""; public $hobby = ""; public $birthdate = ""; } $emp = new Emp(); $emp->name = "jack"; $emp->hobby = "baseketball"; $emp->birthdate = "08\09 12:12:12"; echo json_encode($emp); echo '<br>'; $json = '{"name":"rose","age":18,"gender":"women"}'; var_dump(json_decode($json)); echo '<br>'; var_dump(json_decode($json,true));以上的代码实现了将数组,对象编码成json格式的数据,同时也实现了json格式的数据编码成数组和对象的方法。这个是比较简单的。接下来看看xml数据的解析。        先了解下XML。 XML 用于描述数据,其焦点是数据是什么。XML 文件描述了数据的结构。 在 XML 中,没有预定义的标签。您必须定义自己的标签。php提供了三种解析xml的方式,分别是:Expat解析器,DOM解析器,simpleXML。这三种有不同的方式来解析xml。       Expat解析器是基于事件驱动解析器。基于事件的解析器集中在 XML 文档的内容,而不是它们的结构。正因为如此,基于事件的解析器能够比基于树的解析器更快地访问数据。如下代码: //Initialize the XML parser $parser=xml_parser_create(); //Function to use at the start of an element function start($parser,$element_name,$element_attrs) { switch($element_name) { case "NOTE": echo "-- Note --<br>"; break; case "TO": echo "To: "; break; case "FROM": echo "From: "; break; case "HEADING": echo "Heading: "; break; case "BODY": echo "Message: "; } } //Function to use at the end of an element function stop($parser,$element_name) { echo "<br>"; } //Function to use when finding character data function char($parser,$data) { echo $data; } //Specify element handler xml_set_element_handler($parser,"start","stop"); //Specify data handler xml_set_character_data_handler($parser,"char"); //Open XML file $fp=fopen("test.xml","r"); //Read data while ($data=fread($fp,4096)) { xml_parse($parser,$data,feof($fp)) or die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); } //Free the XML parser xml_parser_free($parser); 工作原理: 通过 xml_parser_create() 函数初始化 XML 解析器创建配合不同事件处理程序的的函数添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数通过 xml_parse() 函数来解析文件 "test.xml"万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明调用 xml_parser_free() 函数来释放分配给 xml_parser_create() 函数的内存 这种方式一看就比较麻烦了,这个定义的标签比较少,如果很多的话就。。。        DOM解析器是基于树的解析器。基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了对树中元素的访问,例如文档对象模型 (DOM)。DOM解析器的使用就相对简单些,直接给出代码: $xmlDoc = new DOMDocument(); $xmlDoc->load("test.xml"); print $xmlDoc->saveXML(); $x = $xmlDoc->documentElement; foreach ($x->childNodes as $item){ echo $item->nodeName.": ".$item->nodeValue.'<br>'; } 是不是几行代码就可以搞定了,但是打印出来就会发现有问题,当 XML 生成时,它通常会在节点之间包含空白。XML DOM 解析器把它们当作普通的元素,如果您不注意它们,有时会产生问题。        最后看看simpleXML解析的方式。

    SimpleXML 是 PHP 5 中的新特性。

    SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。

    与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。

    SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如:

    元素被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时,它们会被置于数组中。属性通过使用关联数组进行访问,其中的索引对应属性名称。元素内部的文本被转换为字符串。如果一个元素拥有多个文本节点,则按照它们被找到的顺序进行排列。

    当执行类似下列的基础任务时,SimpleXML 使用起来非常快捷:

    读取/提取 XML 文件/字符串的数据编辑文本节点或属性

    然而,在处理高级 XML 时,比如命名空间,最好使用 Expat 解析器或 XML DOM。

    $xml = simplexml_load_file("test.xml"); echo $xml->to."<br>"; echo $xml->from."<br>"; echo $xml->heading."<br>"; echo $xml->body."<br>";  这种方式就比较死了,也是比较少的代码就是实现了解析,但是这三种各有各的优势,在使用的时候都可以使用,但最好是在应用场景中做筛选。

    转载请注明原文地址: https://ju.6miu.com/read-666880.html

    最新回复(0)