Xml文件之解析

本文介绍了XML解析的四种常见方式,包括SAX、DOM、JDom和Dom4J,以及使用XmlDecoder和XmlEncoder解析XML文件的方法。详细分析了每种解析方式的优缺点,帮助读者理解不同解析技术在实际应用中的选择。
摘要由CSDN通过智能技术生成

这里写图片描述
XML之Sax(simple api for xml )解析:

主实现类:

package com.xml;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.junit.Test;
import org.xml.sax.SAXException;
/*
 * Sex解析的特点:
 * 1.基于事件的读取
 * 2.基于顺序的读取,速度快
 * 3.不能任意读取节点(灵活性差一些)
 * 4.sex更适用于在要求跟高的设备上使用(Android开发中);
 * 5.解析时占用内存小
 */
public class ImplementsXML {

	@Test
	public static void saxparsemxl() {
		//1.创建一个sax解析工厂对象
		SAXParserFactory spf=SAXParserFactory.newInstance();
		//2.通过工厂对象创建sax解析器
		try {
			
		 SAXParser sp=	spf.newSAXParser();
		 //3.创建一个数据处理器(需要我们自己来编写)
		dataParser dp=new dataParser();
		//4.开启解析
		InputStream is=	Thread.currentThread().getContextClassLoader().getResourceAsStream("com/xml/NewFile.xml");
		
		try {
			//参数一输入文件字节流 /参数二 自己编写的数据处理器
			sp.parse(is,dp);
		ArrayList<person>	p=dp.getPersons();
		//通过for循环输出对象	
		for(person p1:p) {
				System.out.println(p1);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}

	public static void main(String[] args) {
		//调用解析xml的方法
		saxparsemxl();
	}
}

数据处理器类:

package com.xml;
import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class dataParser extends DefaultHandler {
	private ArrayList<person> persons=new ArrayList<person>();
	private person p;//当前正在解析的person对象
	private String tag;//用于记录正在解析的标签名
	
	public ArrayList<person> getPersons() {
		return persons;
	}
	
	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.startDocument();
		;
		System.out.println("开启解析文档>>>>>>>>>");
	}

	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
		System.out.println("文档解析结束.");
	}
	//解析开始元素时调用
	/*
	 * String 命名空间, String 不带前缀的标签名字, String 不带前缀的标签名字, Attributes 当前标签的属性集合
	 */
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		super.startElement(uri, localName, qName, attributes);
		//表示解析到了person标签
		if("person".equals(qName)) {
			p=new person();
			String id=attributes.getValue("person");
			//设置id
			p.setId(id);
		}
		tag=qName;
		System.out.println("startElement"+qName);
	}
	//解析结束元素时调用
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		super.endElement(uri, localName, qName);
		if("person".equals(qName)) {
			persons.add(p);
			tag=null;
		}
		System.out.println("endElement"+qName);
	}
	//解析文本时调用
	
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
		super.characters(ch, start, length);
		if(tag !=null) {
			if("name".equals(t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王家视频教程图书馆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值