4种xml解析器区别
XML作用:不同应用之间的通信和数据共享
Dom遍历法:对内存消耗大,容易内存溢出
SAX方法:事件驱动模式,缺点 不易操作,很难同时访问多处不同数据,对内存消耗不大,速度快
jdom方法:
dom4j方法:优秀比jdom优秀 Dom遍历法:全部加载内容到内存
DocumentBuilderFactory d=DocumentBuilderFactory.newInstance();
try {
DocumentBuilder bu=d.newDocumentBuilder();
Document dom=bu.parse("pom.xml");
NodeList nl=dom.getElementsByTagName("dependency");
System.out.println(nl.getLength());
for(int i=0;i<nl.getLength();i++) {
Node node=nl.item(i);
NodeList nnm=node.getChildNodes(); for(int k=0;k<nnm.getLength();k++) {
Node node1=nnm.item(k);
if(node1.getNodeType()==Node.ELEMENT_NODE) {
String tt=node1.getNodeName();
String tt1=node1.getTextContent();
System.out.println(tt+":"+tt1+"\n");
} }
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} SAX方法 两个步骤:
package com.xml; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class SAXhandler extends DefaultHandler {
int index=0;
public void startElement(String uri, String localName,String qName,Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if(qName=="project") {
index++;
System.out.println("开始遍历第"+index+"gejiedian");
//String va=attributes.getValue("id");//已知属性名称
int aa=attributes.getLength();
for(int i=0;i<aa;i++) {
String name=attributes.getQName(i);
String va=attributes.getValue(name);
System.out.println(name+":"+va);
}
}else if(qName.equals("dependency")) {
System.out.print("节点名称:"+qName);
} }
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if(qName.equals("project")) {
System.out.println("end遍历第"+index+"gejiedian");
} }
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("解析开始");
}
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("解析结束");
} public void characters(char[]ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String value=new String(ch, start, length);
if(!value.trim().equals("")) {
System.out.println(value);
} }
} import java.io.IOException; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class SAX { public static void main(String[] args) {
// TODO Auto-generated method stub
SAXParserFactory sf=SAXParserFactory.newInstance();
try {
SAXParser sp=sf.newSAXParser();
SAXhandler sh=new SAXhandler();
sp.parse("pom.xml", sh); } catch (ParserConfigurationException | SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } jdom方法:需要额外jar包 import java.io.File; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder; public class JDOM { public static void main(String[] args) throws JDOMException, IOException {
SAXBuilder sb=new SAXBuilder();
Document Document = sb.build(new File("pom1.xml"));
Element rootelement=Document.getRootElement();
List<Element> listele=rootelement.getChildren();
List<Object> lo=new ArrayList<Object>(); for( Element ele:listele) {
obj o=new obj();
System.out.println("开始"+(listele.indexOf(ele)+1)+"个");
List<Attribute> attrs=ele.getAttributes();
for(Attribute attr:attrs) {
String attrname=attr.getName();
String attrvalue=attr.getValue();
System.out.println(attrname+":"+attrvalue);
}
List<Element> list_sun= ele.getChildren();
for( Element ele1:list_sun) { if(ele1.getName().equals("groupId") ) {
o.setGroupId(ele1.getValue());
}else if(ele1.getName().equals("artifactId")) {
o.setArtifactId(ele1.getValue());
}
}
lo.add(o);
o=null; } System.out.println(lo); } } dom4j方法:
import java.io.File;
import java.util.Iterator;
import java.util.List; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; public class dom4j { public static void main(String[] args) throws DocumentException {
SAXReader sr=new SAXReader();
Document Document = sr.read(new File("pom1.xml"));
Element root=Document.getRootElement();
Iterator it=root.elementIterator();
while(it.hasNext()) {
Element ele=(Element) it.next();
List<Attribute> list=ele.attributes();
for(Attribute attr:list) {
System.out.println(attr.getName()+":"+attr.getValue());
} Iterator suneles=ele.elementIterator();
while(suneles.hasNext()) {
Element ele1=(Element) suneles.next(); System.out.println(ele1.getName()+":"+ele1.getStringValue());
} }
} }
4种xml解析器区别的更多相关文章
- 4种XML解析器
<?xml version="1.0" encoding="UTF-8"?> <Result> <VALUE> <NO ...
- Duilib源码分析(三)XML解析器—CMarkup
上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...
- XML解析器(转)
常见C/C++ XML解析器有tinyxml.XERCES.squashxml.xmlite.pugxml.libxml等等,这些解析器有些是支持多语言的,有些只是单纯C/C++的.如果你是第一次接触 ...
- Java XML解析器
使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...
- 使用XWAF框架(5)——XML解析器:CXDP
XWAF推出了自己的组合式XML文档解析器,英文名叫:“CXDP”,是“Combined XML Document Parser”的缩写.核心代码属XWAF原创,注释.日志和帮助文档采用全中文描述,特 ...
- 非标准的xml解析器的C++实现:一、思考基本数据结构的设计
前言: 我在C++项目中使用xml作为本地简易数据管理,到目前为止有5年时间了,从最初的全文搜索标签首尾,直到目前项目中实际运用的类库细致到已经基本符合w3c标准,我一共写过3次解析器,我自己并没有多 ...
- tinyxml一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
- TinyXML:一个优秀的C++ XML解析器
//-------------------------------------------------------------------------------------------------- ...
- 转:TinyXM--优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
随机推荐
- 【已转移】【Java架构:基础技术】一篇文章搞掂:Java 8
本文篇幅较长,建议合理利用右上角目录进行查看(如果没有目录请刷新). 一.Java的历史与演变 目的:为完全了解Java,需要理解Java的诞生原因.成型动力以及他继承的思想. 计算机语言的创新与发展 ...
- IDEA的骚操作
1.var声明 "jack".var ==>final String name = "jack"; 2.null判空 user.null==>if( ...
- Redis入门很简单之四【初识Jedis】
Redis入门很简单之四[初识Jedis] 博客分类: NoSQL/Redis/MongoDB redisnosql缓存jedis 使用Jedis提供的Java API对Redis进行操作,是Red ...
- JQ-jQuery-Ajax:jQuery Ajax 操作函数
ylbtech-JQ-jQuery-Ajax:jQuery Ajax 操作函数 1.返回顶部 1. jQuery Ajax 操作函数 jQuery 库拥有完整的 Ajax 兼容套件.其中的函数和方法允 ...
- IDEA 报错记录
IDEA 报错记录 Process finished with exit code 0 这种主要是配了默认的 Tomcat ,然后又配置了外部的 Tomcat.解决办法,注释掉默认的: <dep ...
- javascript拷贝创建对象
/*拷贝创建对象*/ function hightExtend() { var key = 0, i = 0, len = arguments.length; target = null; if ...
- [转]关于Unity中文件读取 - 大世界
原文 http://www.cnblogs.com/ThreeThousandBigWorld/p/3199245.html 存储: 在程序发布后文件的存放有两种,第一种是打包到Uniyt的资源包 ...
- 2019牛客多校第⑨场H Cutting Bamboos(主席树+二分)
原题:https://ac.nowcoder.com/acm/contest/889/H 题意: 给你一些竹子,q个询问,问你从第l到第r个竹子,如果你要用y次砍完它,并且每次砍下来的长度是相同的,问 ...
- Opengl 之 窗口初体验 ------ By YDD的铁皮锅
大二的时候开始想着做游戏,因为学校的课程实在是无聊就想着做些有意义的事情.毕竟学了编程这一行就得做些实事,于是就在网上搜了一下图形编程,偶然的了解到了Opengl (同时还有Windows上的Dire ...
- UVA11134_Fabled Rooks
大概题意: 在n*n的棋盘上面放n个车,能否使他们互相不攻击(即不能在同一行一列),并且第i个车必须落在第i的矩形范围(xl,yl, xr,yr)之内 xy互相并不干扰,所以就可以把这个二维问题压缩成 ...