XML的两种解析方式,Dom4j and SAX parse

Dom4j and Sax difference。

  • Dom4j 解析的速度慢,而且消耗内存,因为在解析之前要先把文件放到内存中。并采用基于对象的模型解析

  有以下几点

  1. Dom4J parse loads the entire XML file into memory before parsing.

  2. It uses Object based Model for parsing XML.

  3. High memory usage - as it loads the file to memory.

  4. We can insert or delete nodes.

  5. Traverse in any direction.

  6. With Dom4J we can use all the XPATH expressions.

  代码如下:

 1        SAXReader reader = new SAXReader();
 2             InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("data.xml");
 3 //            InputStream is = new FileInputStream(new File("C:/test/data.xml"));
 4             Document doc = reader.read(is);
 5             Element ele = doc.getRootElement();
 6             @SuppressWarnings("unchecked")
 7             List<Element> list = ele.elements();
 8             for(Element elelist : list){
 9                 if("driver".equals(elelist.getName())){
10                     driver = elelist.getTextTrim();
11                 }
12                 if("url".equals(elelist.getName())){
13                     url = elelist.getTextTrim();
14                 }
15                 if("password".equals(elelist.getName())){
16                     password = elelist.getTextTrim();
17                 }
18                 if("username".equals(elelist.getName())){
19                     username = elelist.getTextTrim();
20                 }
21
22             }
  • SAX 解析是快速的,内存的消耗小,并采用事件模型解析。

  有以下几点

  1. SAX parses the XML file Node by Node.

  2. It uses Event based Model for parsing XML.

  3. Low memory usage as it does not loads the entire file to memory instead read it node by node.

  4. We cant insert or delete a node.

  5. Top to bottom traversing.

  6. With SAX parser we can only use basic XPATH expressions and can not use expressions like last etc.

  对于大文件xml 的读取可以使用SAX,如果想要使用复杂的xpath 表达式可以使用dom4j.

  使用SAX 解析的时候我们要继承 DefaultHandler , 在这有startDocument(),endDocument(),startElement(),endElement(),characters() etc. 方法。

  当我们解析的时候会逐行解析,放到 characters() 方法中,然后你可以在endElement()方法中取出各个元素的值。

  代码如下:

 1 package com.devil.util;
 2
 3 import java.io.IOException;
 4
 5 import javax.xml.parsers.ParserConfigurationException;
 6 import javax.xml.parsers.SAXParser;
 7 import javax.xml.parsers.SAXParserFactory;
 8
 9 import org.xml.sax.Attributes;
10 import org.xml.sax.SAXException;
11 import org.xml.sax.helpers.DefaultHandler;
12
13 public class SAXParse extends DefaultHandler {
14     private static String driver = null;
15     private static String url = null;
16     private static String username = null;
17     private static String password = null;
18     private String elementValue = null;
19
20     static {
21         SAXParserFactory factory = SAXParserFactory.newInstance();
22         try {
23             SAXParser parse = factory.newSAXParser();
24             parse.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("data.xml"), new SAXParse());
25         } catch (ParserConfigurationException e) {
26             e.printStackTrace();
27         } catch (SAXException e) {
28             e.printStackTrace();
29         } catch (IOException e) {
30             e.printStackTrace();
31         }
32
33     }
34     @Override
35     public void startElement(String paramString1, String localName,
36             String qname, Attributes pattr) throws SAXException {
37     }
38
39     @Override
40     public void characters(char[] ch, int start, int end) throws SAXException {
41         elementValue = new String(ch, start, end);
42
43     }
44
45     @Override
46     public void endElement(String NamespaceUrl, String localName, String qname)
47             throws SAXException {
48
49         if (qname.equals("driver")) {
50             driver = elementValue.trim();
51         }
52         if ("url".equals(qname)) {
53             url = elementValue.trim();
54         }
55         if ("password".equals(qname)) {
56             password = elementValue.trim();
57         }
58         if ("username".equals(qname)) {
59             username = elementValue.trim();
60         }
61
62     }
63
64     public static String getDriver() {
65         return driver;
66     }
67
68     public static String getUrl() {
69         return url;
70     }
71
72     public static String getUsername() {
73         return username;
74     }
75
76     public static String getPassword() {
77         return password;
78     }
79
80
81     public static void main(String[] args)  {
82
83         System.out.println(SAXParse.getDriver());
84     }
85 }
时间: 2024-10-31 10:49:49

XML的两种解析方式,Dom4j and SAX parse的相关文章

xml的两种解析方式

xml解析是日常项目中用到比較多的技能.不管是配置參数或者数据都能够保存在xml文件里.同一时候也能够将xml作为数据传输的一种格式.本文将介绍两种基本解析方式:xml字符串解析和xml文件解析. xml字符串解析 package com.discover.parse; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Documen

XML的两种解析方式逐行解析(SAX解析)节点解析(DOM解析);

SAX逐行解析 SAX:SimpleAPIfor XML.基于事件驱动的解析方式,逐行解析数据.(采用协议回调机制) NSXMLParser是iOS自带的XML解析类.采用SAX方式解析数据 解析过程由NSXMLParserDelegate协议方法回调 解析过程:开始标签->取值->结束标签->取值 DOM解析 DOM:DocumentObjectModel(文档对象模型).解析时需要将XML文件整体读入,并且将XML结构化成树状,使用时再通过树状结构读取相关数据 GDataXMLNod

xml中俩种解析方式

两种解析方式 1.from xml.etree import ElementTree as ET 利用ElementTree模块下的xml方法可以把一个字符串类型的东西转换成Element类,从而利用Element类下面的方法 xml(字符串)解析方式只能读不能写 from xml.etree import ElementTree as ET # 打开文件,读取XML内容 str_xml = open('xo.xml', 'r').read() # 将字符串解析成xml特殊对象,root代指xm

Xml的三种解析方式

XML的三种解析方式:DOM.SAX.PULL解析 废话不说上代码: package com.minimax.xmlparsedemo; import java.io.InputStream; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.content.res.AssetManager; import android.util.Log; import an

XML解析——Java中XML的四种解析方式

 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四种:1.DOM解析:2.SAX解析:3.JDOM解析:4.DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台. 针对以下XML文件,会对四种方式进行详细描述: 1 <?xml version="1.

XML的四种解析方式

基础方法: DOM.SAX DOM:与平台无关的官方解析方式 SAX:基于事件驱动的解析方式 扩展方法:JDOM.DOM4J(在基础的方法上扩展的,只有Java能够使用的解析方式) DOM: 一次性解析完毕! import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.tran

黑马程序员——XML解析---java中XML的四种解析方式

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便.XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为四种:1.DOM解析:2.SAX解析:3.JDOM解析:4.DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于jav

C#读写XML的两种一般方式

针对XML文档的应用编程接口中,一般有两种模型:W3C制定的DOM(Document Object Method,文档对象模型)和流模型. 流模型的两种变体:"推"模型(XML的简单API)和"拉"模型(.NET中的流模型). XML的解析方法: “推”模型 “拉”模型 DOM “推”模型也就是常说的SAX,SAX是一种靠事件驱动的模型.它每发现一个节点就用“推”模型引发一个事件. .NET在中对XML解析是基于“拉”模型的实现方案.“拉”模型在遍历文档时会把感兴趣

爬虫的两种解析方式 xpath和bs4

1.xpath解析 from lxml import etree 两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点 (1)本地文件 tree = etree.parse(文件名) ===>保存的本地文件路径放入 (2)网络文件 tree = etree.HTML(网页字符串) ==>直接把得到的网页字符串作为参数传入 ret = tree.xpath(路径表达式) [注]ret是一个列表,所以要用ret需要对之进行处理 参考文献:w3c  xpath - 安装xpa