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是一个开源的解 ...
随机推荐
- Gym101158 J 三分 or 模拟退火 Cover the Polygon with Your Disk
目录 Gym101158 J: 求圆与给定凸多边形最大面积交 模拟退火 三分套三分 模拟退火套路 @ Gym101158 J: 求圆与给定凸多边形最大面积交 传送门:点我点我 求 $10 $ 个点组成 ...
- Python 工程师技能图谱skill-map
# **Python 工程师技能图谱** ## **入门**- 笨办法学Py- 官方教程- Hitchhiker- coursera * codeskulptor.org ## **进阶/脚本** # ...
- MySQL date_sub 和 date_add 函数
DATE_SUB: 定义和用法 DATE_SUB() 函数从日期减去指定的时间间隔. 语法 DATE_SUB(date,INTERVAL expr type) date 参数是合法的日期表达式.exp ...
- MySQl 截取函数 left(),right(),substring(),substring_index() 的用法
1. 字符串截取:left(str, length) mysql> select left('sqlstudy.com', 3); +-------------------------+ | l ...
- 驱动中PAGED_CODE的作用
参考:http://blog.csdn.net/broadview2006/article/details/4171397 里面的内容出自<Windows内核情景分析> 简而言之,Wind ...
- Windows IO System
Windows IO System是由一些executive components组成,这些component可以认为是ntoskrnl.exe中相对独立的一些module. 整个IO System是 ...
- Django 同步数据库的时候app中的models的表没有成功创建
出现 no changes detected python3 manage.py makemigrations --empty blog # blog就是你的app名字,此处要写成自己的app名字 ...
- c# dotNetBar symbol属性代码动态设置方法
C#: button.Symbol = "\uf060"; VB: button.Symbol = ChrW("&Hf060") Since we in ...
- python 包管理工具 pip 的配置
近几年来,python的包管理系统pip 越来越完善, 尤其是对于 windows场景下,pip大大改善了python的易用性. https://www.cnblogs.com/yvivid/p/pi ...
- 如何在Web项目中配置Spring MVC
要使用Spring MVC需要在Web项目配置文件中web.xml中配置Spring MVC的前端控制器DispatchServlet <servlet> <servlet-name ...