php下哪种方法合适解析xml,转换成json格式
解析xml文档的类库有很多种,比较常用的就是SimpleXML,DOM Document,XMLReader,基于SAX的xml_parse函数。
根据xml文档结构,以及需求的不同,要选择好对应的类库。
解析小的文档的话,使用SimpleXML比较合适,简单的几个函数就可以搞定。
如果文档非常巨大,最好是XMLReader打开,中间转换成DOM来解析,感觉DOM与XPath结合的比较好。
以上是解析已知文档结构的XML,比如知道使用了什么命名空间,有哪些主要的节点等等信息的XML文档。
如果是要解析任意的XML文档,还是SAX的xml_parse比较合适,自己定义三个handler函数。
比如笔者就是用xml_parse来解析任意的xml文档,生成json格式的字符串。
下面把使用xml_parse来解析xml文档的所需要的三个handler讲解一遍。
首先是三个变量
$depth是指xml文档结构的层数,第一层的值是0。
$json_array是一个多位数组,每一个元素的成员是一个json数组,直接可以用json_encode函数。
这个数组的第一维的index是上面的$depth,解析完每一层的xml结构后,都将其结果"粘贴"到其父节点的最后一个字节点后边。
解析完成后$json_array[0]就是所有的xml文档内容都在里面啦。
$tag_name_stack也是一个数组,后进先出的数组,正在处理的标签名就存在这里面,处理完一个标签后,就将其请出数组。
private $depth = -1;
private $json_array = array();
private $tag_name_stack = array();
private function start_handler($parser, $name, $attrs) {
$arrts_array = array();
foreach ($attrs as $attr_name => $attr_value) {
$attr_name = str_replace(":", "$", $attr_name);
$arrts_array[$attr_name]=$attr_value;
}
$tag_name = str_replace(":", "$", $name);
$this->tag_name_stack[] = $tag_name;
$this->depth++;
//if (count($arrts_array) != 0) {
$this->json_array[$this->depth][$tag_name] = $arrts_array;<br>
首先是把该标签的属性都装入一个数组
foreach ($attrs as $attr_name => $attr_value) {
$attr_name = str_replace(":", "$", $attr_nam
相关文档:
--本文摘自http://www.moandroid.com/?p=508
By: 海市蜃楼 | In: Android开发
3 九 2009
XML 经常用作 Internet 上的一种数据格式,其文件格式想必大家都比较清楚,在这里我结合Android平台,来说明Android SDK提供的读写XML的package。
首先介绍下Android SDK与Java SDK在读写XML文件方面,数据包之间的关系。Android ......
XML在我们的程序中用到的越来越多,因为它存储、读取、修改都比较方便。
下面我来分享一下XML的常用操作(增删改查),下面是程序运行效果:
增(增加节点包括创建XML):
/// <summary>
/// 创建XML文档
/// </summary>
/// <param name="path"></param>
......
XML 和 JSON 是当今常用的两种数据描述与传输的格式,特别是涉及到 JS 时使用 JSON 颇为频繁。自然,在 Java 的世界里少不了完成 JavaBean 与这两种格式相互转换的组件,那就是 XStream 和 JSON-lib。这里我简单记下 XStream 的用法。
其实相类似的工具早已有之。如果用过 DWR 的同志,一定有印像,DWR 进行远 ......
1 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一 ......
extract() //将数组中的键名作为变量名,键值作为变量值
例:
form.html
<form action="action.php" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit&quo ......