Java解析XMl文件之SAX和DOm方法
如题,这两种方法的jar包都在jdk中,不需要下载。
先来说下目录结构:
首先建一个Peron类封装person.xml的属性;DomParseService和SaxParseService分别为两种解析方法的服务类。最后TestXml为测试类。
Person.xml如下:
<?xml version="1.0" encoding="gbk"?> <Persons> <Person id="1"> <name>zhangsan</name> <sex>男</sex> <age>30</age> </Person> <Person id="2"> <name>lisi</name> <sex>女</sex> <age>20</age> </Person> </Persons>
- SAX方法:
public class SaxParseService extends DefaultHandler { private List<Person> mPersons = null; private Person mPerson = null; private String m_preTag = null; public List<Person> getPersons(InputStream xmlStream) throws ParserConfigurationException, SAXException, IOException { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); SaxParseService handler = new SaxParseService(); parser.parse(xmlStream, handler); return handler.getPersons(); } private List<Person> getPersons() { return mPersons; } @Override public void startDocument() throws SAXException { mPersons = new ArrayList<Person>(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("Person".equals(qName)) { mPerson = new Person(); mPerson.setId(Integer.parseInt(attributes.getValue(0))); } m_preTag = qName; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if ("Person".equals(qName)) { mPersons.add(mPerson); mPerson = null; } m_preTag = null; } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (m_preTag != null) { String content = new String(ch, start, length); if ("name".equals(m_preTag)) { mPerson.setName(content); } else if ("sex".equals(m_preTag)) { mPerson.setSex(content); } else if ("age".equals(m_preTag)) { mPerson.setAge(Integer.parseInt(content)); } } } }
- DOM方法:
public class DomParseService { public List<Person> getPersons(InputStream is) throws ParserConfigurationException, SAXException, IOException { List<Person> mPersons = new ArrayList<Person>(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document element = builder.parse(is); NodeList PersonNodes = element.getElementsByTagName("Person"); for (int i = 0; i < PersonNodes.getLength(); i++) { Element PersonElement = (Element) PersonNodes.item(i); Person mPerson = new Person(); mPerson.setId(Integer.parseInt(PersonElement.getAttribute("id"))); NodeList ChildNodes = PersonElement.getChildNodes(); for (int j = 0; j < ChildNodes.getLength(); j++) { if (ChildNodes.item(j).getNodeType() == Node.ELEMENT_NODE) { if("name".equals(ChildNodes.item(j).getNodeName())){ mPerson.setName(ChildNodes.item(j).getFirstChild().getNodeValue()); }else if("sex".equals(ChildNodes.item(j).getNodeName())){ mPerson.setSex(ChildNodes.item(j).getFirstChild().getNodeValue()); }else if("age".equals(ChildNodes.item(j).getNodeName())){ mPerson.setAge(Integer.parseInt(ChildNodes.item(j).getFirstChild().getNodeValue())); } } } mPersons.add(mPerson); } return mPersons; } }
测试类如下。里面正对SAX和DOM分别写了两个方法:
public class TestXml { public static void main(String[] args) { SaxParse(); DomParse(); } public static void DomParse() { DomParseService dps=new DomParseService(); try { List<Person> mPersons=dps.getPersons(new FileInputStream(new File("e:/Person.xml"))); for(Person p:mPersons){ System.out.println(p.getName()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void SaxParse() { SaxParseService sps=new SaxParseService(); try { List<Person> Persons=sps.getPersons(new FileInputStream(new File("e:/Person.xml"))); for(Person p:Persons){ System.out.println(p.getName()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Java解析XMl文件之SAX和DOm方法的更多相关文章
- java解析XML文件四种方法之引入源文件
1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Documen ...
- Java解析xml文件遇到特殊符号&会出现异常的解决方案
文/朱季谦 在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息: Error on line 60 of document : 对实体 "xxx" ...
- java解析xml文件并输出
使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...
- 使用Java解析XML文件或XML字符串的例子
转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...
- 转载 VC轻松解析XML文件 - CMarkup类的使用方法
VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXM ...
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...
- Java解析XML文档(简单实例)——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...
- Java解析XML文件的方式
在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...
- 关于java解析xml文件出现的问题
DOM解析xml文件 问题1:导入javax.xml.parsers.DocumentBuilderFactory出现问题,如图: 解决办法是:由于创建工程时有个默认的jre,重新创建工程改掉就解决了 ...
随机推荐
- Spring MVC Framework 注解
ControllerAdvice Spring MVC Framework会把 @ControllerAdvice注解内部使用 @ExceptionHandler.@InitBinder.@Model ...
- java 数据库连接池 Oracle版
首先应加入连接池和数据库连接的配置文件:数据库连接包:ojdbc6.jar数据库连接池包:commons-pool2-2.2.jar commons-dbc ...
- 文件映射spring 使用classpath方式加载hibernate映射文件
在改章节中,我们主要介绍文件映射的内容,自我感觉有个不错的建议和大家分享下 <!-- 批量指定到classpath下面 --> <property name="mappin ...
- Codeforces Round #332 (Div. 2) D. Spongebob and Squares 数学题枚举
D. Spongebob and Squares Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/ ...
- Codeforces Bubble Cup 8 - Finals [Online Mirror] F. Bulbo DP
F. Bulbo Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/575/problem/F Des ...
- TC SRM 665 DIV2 A LuckyXor 暴力
LuckyXorTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 TC Description A lucky number is a positive int ...
- 几种server模型
TCP測试用客户程序 每次执行客户程序,在命令行參数指定server的ip地址,port,发起连接的子进程数,和一个待发送的字符串数据,客户程序将模拟多个客户依据指定的子进程数创建子进程来并发的连接到 ...
- mybatis0210 mybatis和ehcache缓存框架整合
.1mybatis和ehcache缓存框架整合 一般不用mybatis来管理缓存而是用其他缓存框架在管理缓存,因为其他缓存框架管理缓存会更加高效,因为别人专业做缓存的而mybatis专业做sql语句的 ...
- MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
http://mysql.taobao.org/monthly/2016/06/10/ 在5.7版本中,InnoDB实现了新的handler的records接口函数,当你需要表上的精确记录个数时,会直 ...
- 第2章 数字之魅——斐波那契(Fibonacci)数列
斐波那契(Fibonacci)数列 问题描述 递归算法: package chapter2shuzizhimei.fibonacci; /** * Fibonacci数列递归求解 * @author ...