JAVA之XML文件解析

在Java、Android开发中,xml文件的解析很重要。本人使用过的xml文件解析的方式有两种,一种是DOM文档解析、还有一种是SAX。

DOM是基于文档树结构的、SAX是基于事件驱动的。SAX则是遇到标签则触发工作的。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优缺点很明显:DOM对于大型文件的操作不好(因为它要先读入整个文档到内存中),SAX为了解决这样问题。不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少。

1、DOM方式解析

 1 package com.hk.xml;
 2
 3 import java.io.File;
 4 import java.io.IOException;
 5 import javax.xml.parsers.DocumentBuilder;
 6 import javax.xml.parsers.DocumentBuilderFactory;
 7 import javax.xml.parsers.ParserConfigurationException;
 8 import org.w3c.dom.Document;
 9 import org.w3c.dom.NamedNodeMap;
10 import org.w3c.dom.Node;
11 import org.w3c.dom.NodeList;
12 import org.xml.sax.SAXException;
13 public class DOMParseXML {
14
15     public DocumentBuilder getDocBuilder()
16     {
17         DocumentBuilder db = null;
18         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
19         try
20         {
21             db = dbFactory.newDocumentBuilder();
22         } catch (ParserConfigurationException e)
23         {
24             e.printStackTrace();
25         }
26         return db;
27     }
28
29     public void XMLParse(){
30         DocumentBuilder db = getDocBuilder();
31         try {
32             Document document = db.parse(new File("books.xml"));
33             //获取所有所有book节点
34             NodeList bookList = document.getElementsByTagName("book");
35             for (int i = 0; i < bookList.getLength(); i++) {
36                 Node node = bookList.item(i);
37                 NamedNodeMap map = node.getAttributes();
38                 for(int j=0; j<map.getLength(); j++){
39                     Node mNode = map.item(j);
40                     System.out.println(mNode.getNodeName()+":"+mNode.getNodeValue());
41                 }
42             }
43         } catch (SAXException e) {
44             // TODO 自动生成的 catch 块
45             e.printStackTrace();
46         } catch (IOException e) {
47             // TODO 自动生成的 catch 块
48             e.printStackTrace();
49         }
50     }
51     public static void main(String[] args) {
52         DOMParseXML parse = new DOMParseXML();
53         parse.XMLParse();
54     }
55 }

2、SAX方式

 1 package com.hk.xml;
 2
 3 import java.util.List;
 4
 5 import org.xml.sax.Attributes;
 6 import org.xml.sax.SAXException;
 7 import org.xml.sax.helpers.DefaultHandler;
 8
 9 import com.hk.entity.Mp3Info;
10
11 public class Mp3ListContentHandler extends DefaultHandler {
12
13     private List<Mp3Info> infos = null;
14     public List<Mp3Info> getInfos() {
15         return infos;
16     }
17
18     public Mp3ListContentHandler(List<Mp3Info> infos) {
19         super();
20         this.infos = infos;
21     }
22
23     public void setInfos(List<Mp3Info> infos) {
24         this.infos = infos;
25     }
26
27     private Mp3Info mp3Info = null;
28     private String tagName = null;
29     @Override
30     public void startDocument() throws SAXException {
31         System.out.println("------开始解析XML文件------");
32     }
33
34     @Override
35     public void endDocument() throws SAXException {
36         System.out.println("------XML文件解析结束------");
37     }
38
39     @Override
40     public void startElement(String uri, String localName, String qName,
41             Attributes attributes) throws SAXException {
42         this.tagName = localName;
43         if(tagName.equals("resource")){
44             mp3Info = new Mp3Info();
45         }
46     }
47
48     @Override
49     public void endElement(String uri, String localName, String qName)
50             throws SAXException {
51
52         if(qName.equals("resource")){
53             infos.add(mp3Info);
54         }
55         tagName = "";
56     }
57
58     @Override
59     public void characters(char[] ch, int start, int length)
60             throws SAXException {
61         String temp = new String(ch,start,length);
62         if(tagName.equals("id")){
63             mp3Info.setId(temp);
64         }else if(tagName.equals("mp3.name")){
65             mp3Info.setMp3Name(temp);
66         }else if(tagName.equals("mp3.size")){
67             mp3Info.setMp3Size(temp);
68         }else if(tagName.equals("lrc.size")){
69             mp3Info.setLrcSize(temp);
70         }else if(tagName.equals("lrc.name")){
71             mp3Info.setLrcName(temp);
72         }
73     }
74 }
时间: 2024-11-06 11:49:06

JAVA之XML文件解析的相关文章

JAVA之XML文件解析(根据头部和身体自动组合成SQL)

package com.citic.util; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Iterator; import j

java基础之概谈xml文件解析

XML已经成为一种很通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.诸多web应用框架,其可配置的编程方式,给我们的开发带来了很大程度的便捷,但细细想来,它们的应用无一不是java bean与xml之间的转换解析.本文将对xml的两种操作标准DOM和SAX,从它们各自的特点.适用范围等方面进行简单介绍. DOM (Document Object Model) :DOM标准中,采用W3C标准表示XML,有多重语言支持,因此其跨平台性很好.采用DOM规范

用java操作XML文件(DOM解析方式)

XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DOM解析方式 在java工程中导入dom4j.jar包. (一)用java读XML文件 <1>创建SAXReader对象. RAXReader reader=new RAXReader(); <2>调用RAXReader的Document read(File file)方法,获取xml文

xml文件解析基础和签名

0. 前言 参考文档1:使用dom4j读取xml文件的四种方式 参考文档2:dom4j解析xml文件 参考文档3:String 和 document 的相互转换总结 参考文档4: Java SE 6中 XML 数字签名的标准 Java 接口 参考文档5:XML Security with Digital Signature in JAVA 1.xml文件的解析 1.1 基本的jdk解析xml的原始api解析 声明 1.以下代码块要放到一个类中才能运行 dom类型为:org.w3c.dom.* 解

android基础知识13:AndroidManifest.xml文件解析

1.重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息. 因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所

XML文件解析之JDOM解析

1.JDOM介绍 JDOM的官方网站是http://www.jdom.org/,JDOM解析用到的jar包可以在http://www.jdom.org/dist/binary/中下载,最新的JDOM2的版本是2.0.5,JDOM1的版本是1.1.3,根据官网中的介绍可以知道.JDOM是一个在基于内存的XML模型,它用于读写创建修改XML文档.JDOM和DOM相似因为他们都提供了内存XML文档模型,但是DOM被设计用于很多种语言(C,C++,ECMSctipr,Java,JScript,Lingo

基于Java的XML文件模拟数据库进行增删改查操作

我们知道XML文件既可以用来进行数据的传输,也可以配合DTD约束文件用来作为配置文件,当然其本质就是一个加了标签以及众多空格保持格式的字符串,那么就可以用Java进行操作. 本例是使用MyEclipse带入DOM4j解析时要用的jar包的基础上做的:当然DOM4j相对于DOM SAX 等解析方式的方便程度是不言而喻的. 下面是本次用例XML文件 <?xml version="1.0" encoding="UTF-8"?> <persons> 

通过正则表达式实现简单xml文件解析

这是我通过正则表达式实现的xml文件解析工具,有些XHTML文件中包含特殊符号,暂时还无法正常使用. 设计思路:常见的xml文件都是单根树结构,工具的目的是通过递归的方式将整个文档树装载进一个Node对象.xml文档树上的每一个节点都是一个Node对象,对象拥有title.attribute和text三个自身变量以及一个childrenNode集合. 一.编写Node类 import java.io.Serializable; import java.util.HashMap; import j

Android进阶之XML文件解析

xml序列化是把内存数据写入硬盘或SD卡. XML文件解析的方式: 1.dom解析,生成一个树状结构,并全部加入内存,在内存修改树状结构的节点即可.但是消耗内存大. 2.sax解析 基于事件的解析方式.速度快,效率高,但是不能倒退. 3.pull解析 基于事件的解析 pull解析方式: 第一步,初始化解析器,设置要解析的数据流.(此刻指向文档的开始部分) 第二步,得到事件. 第三步,总的节点集合. 第四步,单个节点. public class PullXMLTools { public Pull