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