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. 【android】解决Viewpager设置高度为wrap_content无效的方法

    今天发现设置viewpager高度为wrap_content时并没作用.stackoverflow给出了解决方式,就是自己定义viewpager,重写onMesure()方法: public clas ...

  2. sas数据导入终极汇总-之中的一个

    将数据文件读入SAS --DATA Step / PROC IMPORT    1.将SAS文件读入SAS--    data sasuser.saslin;      set "F:\sa ...

  3. 最短路径----SPFA算法

    求最短路径的算法有许多种,除了排序外,恐怕是ACM界中解决同一类问题算法最多的了.最熟悉的无疑是Dijkstra,接着是Bellman-Ford,它们都可以求出由一个源点向其他各点的最短路径:如果我们 ...

  4. 基于机器学习的web异常检测——基于HMM的状态序列建模,将原始数据转化为状态机表示,然后求解概率判断异常与否

    基于机器学习的web异常检测 from: https://jaq.alibaba.com/community/art/show?articleid=746 Web防火墙是信息安全的第一道防线.随着网络 ...

  5. hdoj--1237--简单计算器(栈模拟)

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. C语言基础-第一章

    1.常量 直接常量: int mm=100; float nn=100.01; 字符常量:   编译指令,#define 常量名 常量值   (预处理命令,预处理命令都#开头.成为宏命令)  关键字, ...

  7. birthday

    2.29 7.25  7.... 5... 10.01 02 03

  8. ES6学习笔记(十三)Iterator遍历器和for...of循环

    1.概念 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有 ...

  9. shell应用之批量添加用户实例

    这里要实现功能介绍 读取一个用户列表文件 给列表中的用户添加随机密码需要包含大小写字符和数字 保存对应的用户和密码文件 这些用户属于同个用户组 1.列表文件 [root@mail ~]# cat li ...

  10. 【转载】解决django models文件修改后的数据库同步问题——south模块

    转载链接:https://www.cnblogs.com/frchen/p/5732490.html 在使用django进行开发时,往往需要根据不同的需求对model进行更改.而这时候,python ...