如题,这两种方法的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方法的更多相关文章

  1. java解析XML文件四种方法之引入源文件

    1.DOM解析(官方) try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();         Documen ...

  2. Java解析xml文件遇到特殊符号&会出现异常的解决方案

    文/朱季谦 在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息: Error on line 60 of document : 对实体 "xxx" ...

  3. java解析xml文件并输出

    使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayLi ...

  4. 使用Java解析XML文件或XML字符串的例子

    转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...

  5. 转载 VC轻松解析XML文件 - CMarkup类的使用方法

    VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXM ...

  6. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

  7. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  8. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...

  9. 关于java解析xml文件出现的问题

    DOM解析xml文件 问题1:导入javax.xml.parsers.DocumentBuilderFactory出现问题,如图: 解决办法是:由于创建工程时有个默认的jre,重新创建工程改掉就解决了 ...

随机推荐

  1. 转载JQuery 获取设置值,添加元素详解

    转载原地址 http://www.cnblogs.com/0201zcr/p/4782476.html jQuery 获取内容和属性 jQuery DOM 操作 jQuery 中非常重要的部分,就是操 ...

  2. CodeForces 589J Cleaner Robot (DFS,或BFS)

    题意:给定n*m的矩阵,一个机器人从一个位置,开始走,如果碰到*或者边界,就顺时针旋转,接着走,问你最后机器人最多能走过多少格子. 析:这个题主要是题意读的不大好,WA了好几次,首先是在*或者边界才能 ...

  3. Javascript高级篇-JS闭包

    Javascript闭包 1.变量的作用域 1.1局部变量 1.2全局变量(声明在外边或不用var来声明的变量) 2.外部读取方法内部的局部(私有)变量 function a(){ var b = & ...

  4. ASP获取json天气信息

    ASP代码(ASP获取页面源码方法,有编码.超时时间参数,处理了乱码.超时的问题): Function GetHttpPage(HttpUrl) Then GetHttpPage="$Fal ...

  5. ags模版与vs

    esri为每个版本的sdk指定了特定的vs开发版本,比如ags10.0,ags10.1指定的是vs2008和vs2010,大概是因为发布时间的关系. 无论如何,我们可以将模版移植到新的vs下.(注意红 ...

  6. HDU 5522 Numbers 暴力

    Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5522 ...

  7. HTML5 服务器推送事件(Server-sent Events)实战开发

    转自:http://www.ibm.com/developerworks/cn/web/1307_chengfu_serversentevent/ http://www.ibm.com/develop ...

  8. android Camera 数据流程分析

    这篇文章主要针对其数据流程进行分析.Camera一般用于图像浏览.拍照和视频录制.这里先对图像浏览和拍照的数据流进行分析,后面再对视频电话部分进行分析. 1.针对HAL层对摄像头数据处理补充一下 Li ...

  9. mapreduce2运行流程

  10. target=_parent与target=_top的区别与用途

    转自:http://www.taoshaw.com/taoshaw/article.asp?id=1868 在手动改HTML代码时经常会用到target参数,常用的有两个target=_blank 和 ...