安卓--xml和Json数据解析

XMl数据基础

1.XML技术基础

XML-Extensible Markup Language 可扩展标记语言

用于实现数据存储(HTML用于页面描述,如何表现数据,同属于SGML-标准通用标记语言)

Internet中跨平台,依赖于内容的,结构化文档信息

XML与Access,oracle,SQL server不同,只是展示数据,没有提供强大的数据分析能力

C#,Java,php,Asp,Javascript等都可以获取xml数据,提供了专门解析XML的方法。

XML一般用于轻量级的数据存储,比如配置文档

2.XML的语法

第一行必须对XML进行声明,声明XML的版本;

标记必须成双成对出现,分别称为开始标记和结束标记;

XML对标记的大小写身份敏感;

XML标记是用户自行定义的,每个标记必须有结束标记;

开始标记可以带有属性,属性值必须用双引号括起来;

3.XML文档举例
<?xml version="1.0" encoding="utf-8" ?>

<students>

<student id="001">

<name>Jerry</name>

<sex>male</sex>

<age>19</age>

</student>

<student id="002" calss="2">

<name>Tom</name>

<sex>male</sex>

<age>20</age>

</student>

<student id="003">

<name>Nancy</name>

<sex>female</sex>

<age>18</age>

</student>

</students>

文档的第一行是XML声明,一般定义了XML文档的版本号和文档所使用的编码,在这个例子中表示文档将使用XML1.0的规范.

下一行定义了文档里面的第一个元素(element)students,一般第一个元素称为根元素。 students又定义了三个子元素student,student又定义了三个子元素name、sex、age,同时还定义了两个属性,id和class。

标签名和属性名也可以用中文,建议尽量用英文。

使用SAX解析XML数据

  • SAX的原理
    • 作为接口,SAX是时间驱动器XML解析的一个标准接口不会改变,已被OASIS所采纳。
  • 基于对象和基于事件的接口
    • 语法分析器有两类接口:基于对象接口和基于事件的接口。DOM是基于对象的语法分析器的标准API。作为基于对象的接口,DOM通过在内存中显示地构建对象树来与应用程序通信。对象树是XML文件中元素树地精确映射。
  • 常用地接口和类
    • ContentHandler:定义与文档本身关联地事件(例如,开始和结束标记)。大多数应用程序都注册这些事件。
    • DTDHandler:定义与DTD关联地事件。然而,它不定义足够的事件来完整地报告DTD。如果需要对DTD进行语法分析,请使用可选地DeclHandler。DeclHandler是SAX地扩展,并且不是所有地语法分析器都支持它。
    • EntityResolver:定义与装入实体关联地事件。只有少数几个应用程序注册这些事件。
    • ErrorHandler:定义错误事件。许多应用程序注册这些事件以便用它们自己地方式报错。

使用DOM解析XML

  • DOM概述

    • DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。这是表示和处理一个HTML或XML文档的常用方法。DOM的设计是以对象管理组织(OMG)的规约为基础的,英寸可以用于任何编程语言。
  • DOM的结构

    1. 一级DOM
    2. 二级DOM
    3. 三级DOM
    4. “0级"DOM
    5. 节点
    6. Node的层次
    7. 文档树(节点树)

PULL解析技术

Pull解析器的运行方式与SAX解析器相似,也提供了类似的功能事件,例如开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser,nextText()方法可以获取下一个Text类元素的值。

Json数据基础

和XML类似,但是比XML轻量一点,一种统一传递数据的格式,特别适合在JavaScript中使用。JSON可以直接转为Javascript对象。

处理Javascript 和web服务器端的之间数据交换

  1. Object
  2. Array
  3. Value
  4. String
  5. Number

简单来说就,JSON是JavaScript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。

(1)对象

对象在js中表示为“{}”括起来的内容,数据结构为 {key1:value2,key2:value2,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

(2)数组

数组在js中是中括号“[]”括起来的内容,数据结构为 [“java”,“javascript”,“vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

Json数据解析技术

技术

JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包,

JSONObject继承了Object,实现了JSON接口

此类有两个包:net.sf.json.JSONObject 和org.json.JSONObject

示例
public class DemoParseJson extends Activity {

	String jsonStr = "";



	@Override

	protected void onCreate(Bundle savedInstanceState) {

		// TODO Auto-generated method stub

		super.onCreate(savedInstanceState);
		try{
		createJson();
		}catch(Exception e){
			e.printStackTrace();
		}
		parseJson("");
	}
	/*
	 * 后台拼装json数据
	 */
	private void createJson() throws Exception{
			System.out.println("java代码封装为json字符串");
			JSONObject jsonObj = new JSONObject();
			jsonObj.put("username", "张三");
			jsonObj.put("password", "");
			System.out.println("java--->json \n" + jsonObj.toString());

	}

	/*

	 * json解析

	 * 

	 */

	private void parseJson(String jnStr) {

		try {

			/*String jsonStr = "{\"password\":\"\",\"username\":\"张三\"}";

			JSONObject jsonObj = JSONObject.fromObject(jsonStr);

			String username = jsonObj.getString("username");

			String password = jsonObj.optString("password");

			System.out.println("json--->java\n username=" + username

			+ "\t password=" + password);*/

			String jsonContent = "{'hello':world,'abc':'xyz'}";

			JSONObject jsonObject = new JSONObject(jsonContent);//

			String str1 = jsonObject.getString("hello");//

			String str2 = jsonObject.getString("abc");

			System.out.println(str1);

			System.out.println(str2);
			System.out.println("------------------");

			jsonContent = "[{'hello':333,'abc':'false','xyz':{'a':1,'b':'ab'}},{'hello':555,'abc':'true','xyz':{'a':2,'b':'ba'}}]";

			JSONArray jsonArray = new JSONArray(jsonContent);

			for (int i = 0; i < jsonArray.length(); i++) {

				JSONObject jsonobject2 = jsonArray.getJSONObject(i);

				int value1 = jsonobject2.getInt("hello");

				boolean value2 = jsonobject2.getBoolean("abc");

				String value3 = jsonobject2.getString("xyz");

				JSONObject jsonobject3 = jsonobject2.getJSONObject("xyz");

				int value4 = jsonobject3.getInt("a");

				String value5 = jsonobject3.getString("b");

				System.out.println(value1);

				System.out.println(value2);

				System.out.println(value3);

				System.out.println(value4);

				System.out.println(value5);
			}
		} catch (Exception ex) {

			ex.printStackTrace();
		}
	}// private void parseJson
/*	
	 * json格式的字符串怎么转换为xml格式的字符串

	 * http://www.jb51.net/article/76571.htm
	public static void jsonToXML() {
		System.out.println("json字符串转xml字符串");
		String jsonStr = "{'password':'','username':'张三'}";
		JSONObject json = new JSONObject(jsonStr);
		XmlSerializer xmlSerializer = new XmlSerializer();
		xmlSerializer.setRootName("user_info");
		xmlSerializer.setTypeHintsEnabled(false);
		String xml = xmlSerializer.write(json);
		System.out.println("json--->xml \n" + xml);
		}	
	 xml格式的字符串怎么转换为json格式的字符串
	public static void xmlToJSON(){
		 System.out.println("xml字符串转json字符串");
		 String xml = "<?xml version=\".\" encoding=\"UTF-\"?><user_info><password></password><username>张三</username></user_info>";
		 JSON json=XMLSerializer.read(xml);
		 System.out.println("xml--->json \n"+json.toString());
		 }*/

}// public class DemoParseJson extends
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值