XML主要用于数据交换,HTML则用于显示。

相对于DOM的树形解析,SAX采用的是顺序解析,这种解析方法可以快速地读取XML数据的方式。

SAX主要事件:

No. 方法 类型 描述
1 public void startDocument() throws SAXException 普通 文档开始
2 public void endDocument() throws SAXException 普通 文档结束
3

public void startElement(String uri,String localName,String qName,Attributes attributes)

throws SAXException

普通 元素开始,可以取得元素的名称及元素的全部属性
4 public void endElement(String uri,String localName,String qName) throws SAXException 普通 元素结束,可以取得元素的名称及元素的全部属性
5 public void characters(char[] ch,int start,int length) throws SAXException 普通 元素内容

SAX解析步骤:

                              ===========>startDocument()
<?xml version="1.0" encoding="GBK"?>
<addresslist> ===========>startElement("addresslist")
<linkman> ===========>startElement("linkman")
<name> ===========>startElement("name")
李四 ============>characters("李四")
</name> ============>endElement("name")
<email> ============>startElement("email")
111@qq.com ============>characters("111@qq.com")
</email> ============>endElement("email")
</linkman> ============>endElement("linkman")
</addresslist> ============>endElement("addresslist")
============>endDocument()

使用SAX解析器解析需要自己构造解析器:

 package SAX;

 import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MYSAX extends DefaultHandler{
public void startDocument() throws SAXException{
System.out.println("<?xml version=\"1.0\" encoding=\"GBK\"?>");
}
public void endDocument() throws SAXException{
System.out.println("\n文档读取结束!");
}
public void startElement(String url,String localName,String name,Attributes attributes) throws SAXException{
System.out.println("<");
System.out.println(name);
if(attributes!=null){
for(int x=0;x<attributes.getLength();x++){
System.out.println(""+attributes.getQName(x)+"=\""+attributes.getValue(x)+"\"");
}
}
System.out.println(">");
}
public void characters(char[] ch,int start,int length) throws SAXException{
System.out.println(new String(ch,start,length));
}
public void endElement(String uri,String localName,String name) throws SAXException{
System.out.println("</");
System.out.println(name);
System.out.println(">");
}
}

然后利用解析器读取XML文件:

 import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class TestSAX {
public static void main(String[] args) throws Exception{
SAXParserFactory factory=SAXParserFactory.newInstance(); //建立SAX解析器
SAXParser parser=factory.newSAXParser(); //构造解析器
parser.parse("d:"+File.separator+"output.xml",new MYSAX());
}
}

结合了SAX的快速读取的优点和DOM可以任意访问节点的优点而成的JDOM包:

生成一个XML文件的代码:

 package SAX;

 import java.io.File;
import java.io.FileOutputStream;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.XMLOutputter;
public class JDOM {
public static void main(String [] args){
Element addresslist = new Element("addresslist");
Element linkman = new Element("linkman");
Element name = new Element("name");
Element email = new Element("email");
Attribute Id = new Attribute("id","lxn");
Document doc = new Document(addresslist);
name.setText("lisi");
email.setText("123@qq.com");
name.setAttribute(Id);
linkman.addContent(name);
linkman.addContent(email);
addresslist.addContent(linkman);
XMLOutputter out = new XMLOutputter();
out.setFormat(out.getFormat().setEncoding("GBK"));
try{
out.output(doc,new FileOutputStream("d:"+File.separator+"addresslist.xml"));
}catch(Exception e){
e.printStackTrace();
}
}
}

使用JDOM读取XML文件:

package SAX;

import java.io.File;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class JDOM{
public static void main(String[] args) throws Exception{
SAXBuilder builder = new SAXBuilder();
Document read_doc = builder.build("d:"+File.separator+"addresslist.xml");
Element stu = read_doc.getRootElement();
List list = stu.getChildren("linkman");
for(int i=0;i<list.size();i++){
Element e=(Element)list.get(i);
String name = e.getChildText("linkman");
String id = e.getChild("name").getAttribute("id").getValue();
String email = e.getChildText("email");
System.out.println("——联系人——");
System.out.println("姓名:"+name+",编号:"+id);
System.out.println("email:"+email);
System.out.println("————");
System.out.println();
}
}
}

运行结果:

——联系人——
姓名:null,编号:lxn
email:123@qq.com
————

XML解析——SAX解析以及更方便的解析工具(JDOM、DOM4J)的更多相关文章

  1. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  2. Java 解析 xml 常见的4中方式:DOM SAX JDOM DOM4J

    Java 四种解析 XML 的特点 1.DOM 解析: 形成了树结构,有助于更好的理解.掌握,且代码容易编写. 解析过程中,树结构保存在内存中,方便修改. 2.SAX 解析: 采用事件驱动模式,对内存 ...

  3. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. android xml解析 sax

    1.简要概述 Android 各种文件都是xml格式的,还有标准的webservice返回的是xml文件,虽然现在的json使用在移动设备端越来越广泛,但是xml格式的解析感觉还是相当必要. 2.sa ...

  5. xml的SAX解析和dom解析的区别

    一,区别 DOM解析 SAX解析 原理: 一次性加载xml文档,不适合大容量的文件读取 原理: 加载一点,读取一点,处理一点.适合大容量文件的读取 DOM解析可以任意进行增删改成 SAX解析只能读取 ...

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

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

  7. 【文件处理】xml 文件 SAX解析

    SAX的全称是Simple APIs for XML,也即XML简单应用程序接口. 与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. 当使用SAX分析器对XML文档 ...

  8. JAVA解析XML之SAX方式

    JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParse ...

  9. javaweb学习总结十(xml解析<SAX以及DOM方式>)

    一:XML解析技术 一般我们使用sun公司或者开源组织开发的工具包解析xml效率比较高. 1:jaxp解析xml,jaxp是sun公司开发的解析xml工具包 2:jaxp解析xml代码如下 a:获取d ...

随机推荐

  1. 转:app store 注册账号生成证书上传app完整的教程

    app store为开发者提供四种类型的申请: 个人ios开发者计划$99/年 公司ios开发者计划$99/年 企业ios开发者计划$299/年 高校ios开发者计划免费 在这里主要介绍一下公司ios ...

  2. Linux怎样改动root用户的password

    Linux系统的root账号是很重要的一个账号.也是权限最大的一个账号,可是有时候忘了rootpassword怎么办?总不能重装系统吧,这个是下下策.事实上Linux系统中,假设忘记了root账号pa ...

  3. Hadoop2.6.0配置參数查看小工具

    前言 使用Hadoop进行离线分析或者数据挖掘的project师,常常会须要对Hadoop集群或者mapreduce作业进行性能调优. 或许你知道通过浏览器訪问http://master:18088/ ...

  4. 怎样解除内容审查程序的password

    如题:怎样解除内容审查程序的password 在不知道password的情况下.通过改动注冊表解决.点击"開始"→"执行",输入"regedit&qu ...

  5. 知方可补不足~powerDesign为模型添加注释(让生成的SQL有注释)

    事实上powerDesign本身就有这个功能,不需要我们修改它的生成器了,这种方法够简单! 一 打开表模型,选择column标签

  6. AngularJs轻松入门(九)与服务器交互

    AngularJs从Web服务器请求资源都是通过Ajax来完成,所有的操作封装在$http服务中,$http服务是只能接收一个参数的函数,这个参数是一个对象,用来完成HTTP请求的一些配置,函数返回一 ...

  7. monitoring_db

    #!/bin/bash# Program: # Automatic inspection operation system and oracle database.# History:# 2016/0 ...

  8. iOS开发——导航栏的一些小设置

    1.导航栏的隐藏与显示:navigationBarHidden - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:YES]; ...

  9. [NOIP2012提高组]国王游戏

    题目:洛谷P1080.Vijos P1779.codevs1198. 题目大意:国王和每个大臣左.右手各写了一个数.规定每个大臣得到的金币数为他前面所有人左手的数字的乘积除以他自己右手的数(向下取整) ...

  10. caioj 1078 动态规划入门(非常规DP2:不重叠线段)(状态定义问题)

    我一开始想的是前i个区间的最大值 显然对于当前的区间,有不选和选两种情况 如果不选的话,就继承f[i-1] 如果选的话,找离当前区间最近的区间取最优 f[i] = max(f[i-1, f[j] + ...