如题,这两种方法的jar包都在jdk中,不需要下载。

先来说下目录结构:

首先建一个Peron类封装person.xml的属性;DomParseService和SaxParseService分别为两种解析方法的服务类。最后TestXml为测试类。

Person.xml如下:

  1. <?xml version="1.0" encoding="gbk"?>
  2. <Persons>
  3. <Person id="1">
  4. <name>zhangsan</name>
  5. <sex></sex>
  6. <age>30</age>
  7. </Person>
  8. <Person id="2">
  9. <name>lisi</name>
  10. <sex></sex>
  11. <age>20</age>
  12. </Person>
  13. </Persons>

  • SAX方法:
  1. public class SaxParseService extends DefaultHandler {
  2. private List<Person> mPersons = null;
  3. private Person mPerson = null;
  4. private String m_preTag = null;
  5.  
  6. public List<Person> getPersons(InputStream xmlStream)
  7. throws ParserConfigurationException, SAXException, IOException {
  8. SAXParserFactory factory = SAXParserFactory.newInstance();
  9. SAXParser parser = factory.newSAXParser();
  10. SaxParseService handler = new SaxParseService();
  11. parser.parse(xmlStream, handler);
  12. return handler.getPersons();
  13. }
  14.  
  15. private List<Person> getPersons() {
  16. return mPersons;
  17. }
  18.  
  19. @Override
  20. public void startDocument() throws SAXException {
  21. mPersons = new ArrayList<Person>();
  22. }
  23.  
  24. @Override
  25. public void startElement(String uri, String localName, String qName,
  26. Attributes attributes) throws SAXException {
  27. if ("Person".equals(qName)) {
  28. mPerson = new Person();
  29. mPerson.setId(Integer.parseInt(attributes.getValue(0)));
  30. }
  31. m_preTag = qName;
  32. }
  33.  
  34. @Override
  35. public void endElement(String uri, String localName, String qName)
  36. throws SAXException {
  37. if ("Person".equals(qName)) {
  38. mPersons.add(mPerson);
  39. mPerson = null;
  40. }
  41. m_preTag = null;
  42. }
  43.  
  44. @Override
  45. public void characters(char[] ch, int start, int length)
  46. throws SAXException {
  47. if (m_preTag != null) {
  48. String content = new String(ch, start, length);
  49. if ("name".equals(m_preTag)) {
  50. mPerson.setName(content);
  51. } else if ("sex".equals(m_preTag)) {
  52. mPerson.setSex(content);
  53. } else if ("age".equals(m_preTag)) {
  54. mPerson.setAge(Integer.parseInt(content));
  55. }
  56. }
  57. }
  58.  
  59. }
  • DOM方法:
  1. public class DomParseService {
  2. public List<Person> getPersons(InputStream is)
  3. throws ParserConfigurationException, SAXException, IOException {
  4. List<Person> mPersons = new ArrayList<Person>();
  5. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  6. DocumentBuilder builder = factory.newDocumentBuilder();
  7. Document element = builder.parse(is);
  8. NodeList PersonNodes = element.getElementsByTagName("Person");
  9. for (int i = 0; i < PersonNodes.getLength(); i++) {
  10. Element PersonElement = (Element) PersonNodes.item(i);
  11. Person mPerson = new Person();
  12. mPerson.setId(Integer.parseInt(PersonElement.getAttribute("id")));
  13. NodeList ChildNodes = PersonElement.getChildNodes();
  14. for (int j = 0; j < ChildNodes.getLength(); j++) {
  15. if (ChildNodes.item(j).getNodeType() == Node.ELEMENT_NODE) {
  16. if("name".equals(ChildNodes.item(j).getNodeName())){
  17. mPerson.setName(ChildNodes.item(j).getFirstChild().getNodeValue());
  18. }else if("sex".equals(ChildNodes.item(j).getNodeName())){
  19. mPerson.setSex(ChildNodes.item(j).getFirstChild().getNodeValue());
  20. }else if("age".equals(ChildNodes.item(j).getNodeName())){
  21. mPerson.setAge(Integer.parseInt(ChildNodes.item(j).getFirstChild().getNodeValue()));
  22. }
  23. }
  24. }
  25. mPersons.add(mPerson);
  26. }
  27. return mPersons;
  28.  
  29. }
  30. }

测试类如下。里面正对SAX和DOM分别写了两个方法:

  1. public class TestXml {
  2.  
  3. public static void main(String[] args) {
  4. SaxParse();
  5. DomParse();
  6. }
  7. public static void DomParse() {
  8. DomParseService dps=new DomParseService();
  9. try {
  10. List<Person> mPersons=dps.getPersons(new FileInputStream(new File("e:/Person.xml")));
  11. for(Person p:mPersons){
  12. System.out.println(p.getName());
  13. }
  14. } catch (FileNotFoundException e) {
  15. e.printStackTrace();
  16. } catch (ParserConfigurationException e) {
  17. e.printStackTrace();
  18. } catch (SAXException e) {
  19. e.printStackTrace();
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. public static void SaxParse() {
  25. SaxParseService sps=new SaxParseService();
  26. try {
  27. List<Person> Persons=sps.getPersons(new FileInputStream(new File("e:/Person.xml")));
  28. for(Person p:Persons){
  29. System.out.println(p.getName());
  30. }
  31. } catch (FileNotFoundException e) {
  32. e.printStackTrace();
  33. } catch (ParserConfigurationException e) {
  34. e.printStackTrace();
  35. } catch (SAXException e) {
  36. e.printStackTrace();
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41.  
  42. }

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. HDU1856More is better(并查集)

    最近发现以前的东西都忘得差不多了,在这里刷刷水题 并查集: int find_parent(int x) { return x = p[x] ? x : p[x] = find_parent(p[x] ...

  2. transition:all 0.5s linear;进度条动画效果 制作原理

    Html: <span class="progress"><b ><i></i></b><em>50< ...

  3. Boost::Asio入门剖析

    Boost::Asio可以在socket等I/O对象上执行同步或异步操作,使用Boost::Asio前很有必要了解Boost::Asio.你的程序以及它们交互的过程. 作为一个引导的例子,我们思考一个 ...

  4. Thinkphp框架 -- ajax无刷新上传图片

    用Thinkphp框架做无刷新上传图片 视图层 View <!doctype html> <html lang="en"> <head> < ...

  5. C#开发的WebService使用JSON格式传递数据+Ajax测试

    [C#]  WebService 使用 JSON 格式傳遞筆記 + JQuery 測試 0 2 因為一些因素,必須改寫WebService,很傳統,但是很多公司還在用.. 因為XML 的關係,不想讓他 ...

  6. Js Pattern - Namespace Pattern

    bad code // BEFORE: 5 globals // Warning: antipattern // constructors function Parent() {} function ...

  7. [AngularJS] Lazy Loading modules with ui-router and ocLazyLoad

    We've looked at lazy loading with ocLazyLoad previously, but what if we are using ui-router and want ...

  8. 统计0到n之间1的个数

    问题描写叙述 给定一个十进制整数N,求出从1到N的全部整数中出现"1"的个数. 比如:N=2时 1,2出现了1个 "1" . N=12时 1,2,3,4,5,6 ...

  9. 关于Linux的10个核心面试问题与答案

    转载:http://www.linuxeden.com/html/news/20140222/148676.html 又到了以轻松的心情来读些严肃内容的时刻了,哈!这是另一篇关于面试问题的文章,我们将 ...

  10. Mac 下配置Tomcat7和eclipse中配置tomcat

    转载自: http://www.cnblogs.com/weilaikeji/archive/2013/05/29/3106473.html 1.下载Tomcat 从Tomcat项目主页下载相关压缩包 ...