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是一个开源的解 ...
随机推荐
- Hadoop 权限管理(转)
如下图,hadoop访问控制分为两级,其中ServiceLevel Authorization为系统级,用于控制是否可以访问指定的服务,例如用户/组是否可以向集群提交Job,它是最基础的访问控制,优先 ...
- [CSP-S模拟测试]:简单的玄学(数学)
题目描述 有$m$个在$[0,2^n)$内均匀随机取值的整型变量,球至少有两个变量取值相同的概率.为了避免精度误差,假设你的答案可以表示成$\frac{a}{b}$的形式,(其中$(a,b)=1$), ...
- cassandra百亿级数据库迁移实践
迁移背景 cassandra集群隔段时间出现rt飙高的问题,带来的影响就是请求cassandra短时间内出现大量超时,这个问题发生已经达到了平均两周一次的频率,已经影响到正常业务了.而出现这些问题的原 ...
- python模块学习之testlink (自动回写测试案例执行结果到testlink)
安装 pip install TestLink-API-Python-client #!/usr/bin/env Python # -*- coding: utf-8 -*- ''' Created ...
- python学习笔记:模块——time模块
timetime模块提供各种时间相关的功能,与时间相关的模块有:time,datetime,calendar等. 时间有三种表示方式,一种是时间戳.一种是格式化时间.一种是时间元组.时间戳和格式化时间 ...
- MYSQL索引的深入学习
通常大型网站单日就可能会产生几十万甚至几百万的数据,对于没有索引的表,单表查询可能几十万数据就是瓶颈. 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条数据,平 ...
- docker stack利用secrets启动wordpress
docker-compose文件 version: '3.1' services: web: image: wordpress ports: - : secrets: - my-pw environm ...
- Linux部分常用命令详解(一)
echo 命令详解 格式: echo string 显示普通字符: echo "it is a test" 或者 echo it is a test 显示转义字符: echo &q ...
- 观察者模式JDK源码解析
由于JDK中为了方便开发人员,已经写好了现成的观察者接口和被观察者类. 先来观察者接口: //观察者接口,每一个观察者都必须实现这个接口 public interface Observer { //这 ...
- 纯Delphi 原生写的 上传到七牛的功能
上传文件到七牛, 支持分片分段上传, 适用于Delphi XE, 10等新版本 分两个函数: uploadToQiniu 和 directUploadToQiniu uploadToQiniu 这个函 ...