php学习之json And xml

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 '
'; 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 '
'; $json = '{"name":"rose","age":18,"gender":"women"}'; var_dump(json_decode($json)); echo '
'; 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 --
"; 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 "
"; } //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);
工作原理:
  1. 通过 xml_parser_create() 函数初始化 XML 解析器
  2. 创建配合不同事件处理程序的的函数
  3. 添加 xml_set_element_handler() 函数来定义,当解析器遇到开始和结束标签时执行哪个函数
  4. 添加 xml_set_character_data_handler() 函数来定义,当解析器遇到字符数据时执行哪个函数
  5. 通过 xml_parse() 函数来解析文件 "test.xml"
  6. 万一有错误的话,添加 xml_error_string() 函数把 XML 错误转换为文本说明
  7. 调用 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.'
'; }
 是不是几行代码就可以搞定了,但是打印出来就会发现有问题,当 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."
"; echo $xml->from."
"; echo $xml->heading."
"; echo $xml->body."
";
 这种方式就比较死了,也是比较少的代码就是实现了解析,但是这三种各有各的优势,在使用的时候都可以使用,但最好是在应用场景中做筛选。



你可能感兴趣的:(php之yii框架学习,php开发)