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
相关文档:
一、简单介绍
using System.Xml;
//初始化一个xml实例
XmlDocument xml=new XmlDocument();
//导入指定xml文件
xml.Load(path);
xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));
//指定一个节点
XmlNode root=xml.SelectSingleNode("/root");
//获取节点下所有直接子节点
XmlNodeList ch ......
创建文档类型声明
一般而言,XML声明放在文档顶部。在PHP中声明十分简单:只需实例化一个DOM文档类的对象并赋予它一个版本号。查看程序清单A:
程序清单 A
<?php
// create doctype
$dom = new DOMDocument("1.0");
// display document in browser as plain text
// display document in browser as plain text ......
1.route.xml文件内容
<?xml version="1.0" encoding="GBK"?>
<root>
<route id="1111">
<id>111</id>
<name>四川</name>
<path>www.baidu.com/hehe.html</path>
</route>
</root>
2.test.html代码
<html>
<body>
<script> ......
本教程来讲一下关于在php编程中常用到的循环语句do while与while的区别吧,while 是当条件为真是才执行而do while至少会执行一下,下面我们就来看看
do {
}while(条件)
看do while的实例吧。
<?
$a =10;
do {
echo $a;
}while ($a>11)
这里会输出10;然后循环终止,那么我们来看看while的实例吧。
$a=10;
w ......