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,重新创建工程改掉就解决了 ...
随机推荐
- libevent的使用方法--回显服务器的简单实例
#include <event.h> #include <sys/types.h> #include <sys/socket.h> #include <net ...
- 基于 Paramiko 的 SSH 通讯类
# -*- coding: UTF-8 -*-import paramikoimport time################################################### ...
- 使用jdk操作 wsdl2java (wedservice)
打开jdk下的bin目录 看下能否找到"wsimport.exe"这个文件 一般情况下都会有 如果没有则说明你的JDK不支持这个功能 然后在DOS窗口下输入wsimport 敲回车 ...
- 什么是比特币(bitcoin)
一.什么是比特币? 比特币是一种由开源的P2P软件产生的电子货币,是一种网络虚拟货币.比特币使用遍布整个P2P网络节点的分布式数据库来记录货币的交易,并使用密码学的设计来确保货币流通各个环节安全性.比 ...
- Codeforces Beta Round #85 (Div. 1 Only) B. Petya and Divisors 暴力
B. Petya and Divisors Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/111 ...
- Codeforces Gym 100203G G - Good elements 暴力
G - Good elementsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...
- C# 利用范型与扩展方法重构代码
在一些C#代码中常常可以看到 //An Simple Example By Ray Linn class CarCollection :ICollection { IList list; public ...
- delphi 滚屏
滚屏 uses MSHTML;var a: IHTMLDocument2; x,y:Integer;begin y:=y+20; //加减进行上下滚动 a :=WebB ...
- TreeView
添加项目 TreeView1.Items.Add(nil,'ABC'); 删除选中的节点 TreeView1.Selected.Delete; 删除鼠标右键选中的节点 var ...
- 浅谈Linux的内存管理机制
转至:http://ixdba.blog.51cto.com/2895551/541355 一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此, ...