XML解析——SAX解析以及更方便的解析工具(JDOM、DOM4J)
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)的更多相关文章
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- Java 解析 xml 常见的4中方式:DOM SAX JDOM DOM4J
Java 四种解析 XML 的特点 1.DOM 解析: 形成了树结构,有助于更好的理解.掌握,且代码容易编写. 解析过程中,树结构保存在内存中,方便修改. 2.SAX 解析: 采用事件驱动模式,对内存 ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- android xml解析 sax
1.简要概述 Android 各种文件都是xml格式的,还有标准的webservice返回的是xml文件,虽然现在的json使用在移动设备端越来越广泛,但是xml格式的解析感觉还是相当必要. 2.sa ...
- xml的SAX解析和dom解析的区别
一,区别 DOM解析 SAX解析 原理: 一次性加载xml文档,不适合大容量的文件读取 原理: 加载一点,读取一点,处理一点.适合大容量文件的读取 DOM解析可以任意进行增删改成 SAX解析只能读取 ...
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...
- 【文件处理】xml 文件 SAX解析
SAX的全称是Simple APIs for XML,也即XML简单应用程序接口. 与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. 当使用SAX分析器对XML文档 ...
- JAVA解析XML之SAX方式
JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParse ...
- javaweb学习总结十(xml解析<SAX以及DOM方式>)
一:XML解析技术 一般我们使用sun公司或者开源组织开发的工具包解析xml效率比较高. 1:jaxp解析xml,jaxp是sun公司开发的解析xml工具包 2:jaxp解析xml代码如下 a:获取d ...
随机推荐
- IOS开发-经常使用站点集合
1. https://developer.apple.com //苹果开发人员站点 2. https://itunesconnect.apple.com //itunes站点 3. ...
- oracle仿全文检索切词机制实现文本信息类似度查找
应用场景: 依据keyword查询与此keyword相似的信息,当中一些keyword要排除掉比如:"有限公司"."有限责任公司"."股份有限公司&q ...
- sass05 数据类型,数据运算
/*! 数字类型 */ $n1: 1.2; $n2: 12; $n3: 14px; p{ font-size: $n3; } /*! 字符串类型*/ $s1: container; $s2: 'con ...
- CUDA笔记13
在新的环境上用CUTIL的时候,出现了问题.无法解析的外部符号 __imp_cutCheckCmdLineFlag 问题描述: kernel.cu.obj : error LNK2019: 无法解析的 ...
- html中隐藏一个元素的方法
display:none; 隐藏不占位 opacity:0; fliter:alpha(opa ...
- vue.js技巧小计
//删除数组索引方法01 del (index) { this.arr.splice(index ,1); } //删除数组索引方法01 del (index) { this.$delete(this ...
- vue中makeMap方法的使用 (定义注册一些值 后期方便使用)
function makeMap ( str, expectsLowerCase ) { var map = Object.create(null); var list = str.split(',' ...
- [JLOI2011]飞行路线 分层图最短路
题目描述: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一 ...
- bzoj5085: 最大 暴力 二分
Code: #include<cstdio> #include<algorithm> #include<cstring> #include<iostream& ...
- DedeCMS让channelartlist支持currentstyle属性
dedecms默认模板的channelartlist是不支持currentstyle属性的.currentstyle属性在导航中应用的比较多,可以实现循环调用栏目后,当前页<li>标签获得 ...