XML的解析和生成

package com.service;
//  错误总结:在switch语句里面没有break,造成了错误
//  利用pull解析器解析XML
//  步骤:
//	1,声明一个null的List集合
//	2,声明一个null的person
//	3,利用Xml类建立一个XmlPullParser类的对象parse
//	4,为此解析器设置要接卸的对象及字符集编码
//	5,利用parser.getEventType()得到当前解析的对象的类型返回值是一个整型
//	6,核心的一步。利用此整型进行while循环,循环条件:不是document的结尾
//	       在while里采用的是switch()语句
//
//	知识点:
//	利用parse.getName()来返回当前指向的标签的名字
//	利用parser.getAttributeValue()得到当前标签的属性值
//	利用parser.nextText()得到当前标签的文本值(相当于文本节点的值)。不是parser.getText()
//	利用event = parser.next();将指针下移
//	利用XmlPullParser的静态常量来判断当前读的是什么

//	将list里的数据写入到XML文档,该方法的参数是OutputStream和List,返回值为空
//	主要是利用了XmlSerializer类的对象
//	步骤:
//	1,建立XmlSerializer类的对象
//	2,为此XmlSerializer对象设置输出流
//	3,开始将list里的数据封装到XML
//	       注意:xml里的标签都是一对一对(即开始和结尾)出现的
//	4,关闭流
//
//	主要的知识点:
//	serializer.startDocument()/serializer.endDocument();开始/结束一个document
//	serializer.startTag()/serializer.endTag()开启/结束一个标签
//	serializer.attribute()给一个标签设置属性值
//	serializer.text()给一个文本节点设置值
//
//	总结:
//  XmlPullParser parse
//  XmlSerializer serializer都是通过Xml的静态方法得到的

import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
import com.domain.Person;
public class XmlService {
//利用XmlPullParser解析XML
//将XML的数据封装到实体,然后放到一个集合中返回
	public List<Person> getXML(InputStream xml) throws Exception{
		 ArrayList<Person> persons=null;
		 Person person=null;
		 XmlPullParser parser=Xml.newPullParser();
		 parser.setInput(xml, "UTF-8");
		 int event=parser.getEventType();
		 while(event!=XmlPullParser.END_DOCUMENT){
			switch (event) {
			case XmlPullParser.START_DOCUMENT:
				 persons=new ArrayList<Person>();
				 break;
			case XmlPullParser.START_TAG:
				if("person".equals(parser.getName())){
					person=new Person();
					String id=parser.getAttributeValue(0);
					person.setId(Integer.valueOf(id));
				}
				if("name".equals(parser.getName())&&person!=null){
					String name=parser.nextText();//注意不是getText();
					person.setName(name);
				}else if("age".equals(parser.getName())&&person!=null){
					String  age=parser.nextText();//注意不是getText();
					person.setAge(Short.valueOf(age));
				}
				break;
			case XmlPullParser.END_TAG:
				if("person".equals(parser.getName())){
					persons.add(person);
					person=null;
				}
				break;

			 }

		 event=parser.next();
		 }

		return persons;
	}

//将List<Person>里的数据放到XML文件中
	public void saveXML(OutputStream outputStream,List<Person> persons) throws Exception{
		XmlSerializer serializer=Xml.newSerializer();//也是通过Xml得到的
		serializer.setOutput(outputStream, "UTF-8");
		serializer.startDocument("UTF-8", null);
		serializer.startTag(null, "persons");
		for(Person person:persons){
			serializer.startTag(null, "person");
			serializer.attribute(null, "id", String.valueOf(person.getId()));

			serializer.startTag(null, "name");
			serializer.text(person.getName());
			serializer.endTag(null, "name");

			serializer.startTag(null, "age");
			serializer.text(String.valueOf(person.getAge()));
			serializer.endTag(null, "age");

			serializer.endTag(null, "person");
		}

	  serializer.endTag(null, "persons");
	  serializer.endDocument();
	}

}
时间: 2024-12-25 00:52:23

XML的解析和生成的相关文章

dom解析和生成XML文件

使用这种方式解析时,需要使用node.getNodeType() == Node.ELEMENT_NODE判断结点是否为元素结点,否则会输出很多#text(结点前有空格存在的原因). 完成的XML解析和生成代码如下: package test; import java.io.*; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.t

Android开发之使用Pull解析器生成XML文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 相关代码如下: public static String writeXML(List<Person> persons, Writer writer){     XmlSerializer serializer = Xml.newSe

java中利用Dom4j解析和生成XML文档_java

一.前言 dom4j是一套非常优秀的Java开源api,主要用于读写xml文档,具有性能优异.功能强大.和非常方便使用的特点.   另外xml经常用于数据交换的载体,像调用webservice传递的参数,以及数据做同步操作等等,   所以使用dom4j解析xml是非常有必要的. 二.准备条件 dom4j.jar 下载地址:http://sourceforge.net/projects/dom4j/ 三.使用Dom4j实战 1.解析xml文档 实现思路: <1>根据读取的xml路径,传递给SAX

Sparks.com用XML和XSL来生成动态页面

xml|动态|页面 XML(可扩展标记语言)看起来可能像某种W3C标准--现在没有什么实际影响,即使以后能派上用场,也是很久以后的事.但实际上,它现在已经得到了应用.所以,不要等到XML已被加进了你最喜爱的HTML编辑器中才开始使用它.它现在就可以解决各种内部问题和B2B系统问题. 在Sparks.com,我们使用XML来标准化从Java对象到HTML数据显示等不同系统之间的数据表示. 特别需要指出的是,我们发现,只要以非常基本的XML结构来实现标准化,就可以更容易地共享和操作数据.在这一过程中

c语言- 如何生成并解析配置文件生成随机数组(C语言实现)?

问题描述 如何生成并解析配置文件生成随机数组(C语言实现)? "xxxx,aa"是要求的数组,xxxx取值任意4位整数,aa取值0到40,中间逗号隔开.如何写配置文件并解析最后输出随机数组呢?本人刚开始学写c语言,程序写得很少有点无从下手,哪位经验丰富的能给举个例子实现一下? ps:后期要在配置文件里实现数组参数的修改,不动源代码. 解决方案 配置文件一般不是用来写的. 是用来读取配置用的. 你这顶多算是写输出文件把. 解决方案二: 你可以上CSDN上 搜索一下 XML的配置文件读写,

Android学习笔记之AndroidManifest.xml文件解析(详解)_Android

一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置. 除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试)

ASP.NET MVC使用RazorEngine解析模板生成静态页_实用技巧

简述       Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目.       我们在很多项目开发中会常常用到页面静态化,页面静态化有许多方式,最常见的就是类似很多PHP CMS种使用的 标签替换的方式(如:帝国CMS.EcShop等),还有很多都是伪静态,伪静态我们就不做过

用XML和XSL来生成动态页面_XML/RSS

作者:马晓宁 xml(可扩展标记语言)看起来可能像某种w3c标准--现在没有什么实际影响,即使以后能派上用场,也是很久以后的事.但实际上,它现在已经得到了应用.所以,不要等到xml已被加进了你最喜爱的html编辑器中才开始使用它.它现在就可以解决各种内部问题和b2b系统问题. 在sparks.com,我们使用xml来标准化从java对象到html数据显示等不同系统之间的数据表示. 特别需要指出的是,我们发现,只要以非常基本的xml结构来实现标准化,就可以更容易地共享和操作数据.在这一过程中,我们

iOS - XML 数据解析

前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Markup Language)是可扩展标记语言的缩写,其中的标记(markup)是关键部分.可以创建内容,然后使用限定标记标记它,从而使每个单词.短语或块成为可识别.可分类的信息.创建的文件或文档实例由元素(标记)和内容构成.当从打印输出读取或以电子形式处理文档时,元素能够帮助更好地理解文档.元素的描述