解析xml的底层接口:一种是dom,一种是sax。

  DOM与SAX的区别。

  DMO:dom解析xml时,首先是将xml文档的内容整个加载到内存中,并解析成树形结构。然后开始随机访问内存中的对橡树。所以当xml文件比较大的时候,效率就会降低,还可能发生内存溢出。

  SAX:是基于事件而且是顺序解析,不会一次性将内容解析完。而是读到什么标签时,调用相应的方法去解析。缺点就是不可逆,一个元素错过之后就没法返回再次解析。但是由于不会事先将内容加载到内存中所以对内存的占用非常小。虽然SAX在开发上比dom要稍微复杂点,需要开发者自己实现事件处理器,但是也正是应为交由开发者自己处理也将变得更加灵活。

DOM

public class Demo {public static void main(String[] args) throws Exception {          //获得一个从xml文档生成dom对象的一个解析器DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();                    //创建dom实例的APIDocumentBuilder db = dbf.newDocumentBuilder();          //将给定的文件解析成xml文档,并返回一个新的dom对象Document doc = db.parse(new File("dubbo.xml"));//输出文档属性,并返回成一个元素集合点实例Element eoc = doc.getDocumentElement();parseElement(eoc);}private static void parseElement(Element element) {//输出元素集合中第一个节点的节点名String name = element.getNodeName();System.out.println("<" + name);//输出节点属性,返回一个map实例NamedNodeMap map = element.getAttributes();if (null != map) {//输出节点属性中 每个属性的name与valuefor (int i = 0; i < map.getLength(); i++) {Attr attr = (Attr)map.item(i);String attrName = attr.getName();String attrValue = attr.getValue();System.out.println("" + attrName + "=\""+attrValue+"\"");}}System.out.println(">");//getChildNodes 返回当前节点下所有的子节点,而dom默认认为换行也是一个节点。所以会出现#test这样的输出(换行导致)NodeList child = element.getChildNodes();for (int i = 0; i < child.getLength(); i++) {Node node = child.item(i);//TEXT_NODE-文字节点类型//DOCUMENT_NODE-文本节点类型//COMMENT_NODE-注释节点类型//ATTRIBUTE_NODE-属性节点类型//ELEMENT_NODE-元素节点类型Short noteType = node.getNodeType();if (noteType == Node.ELEMENT_NODE) {parseElement((Element)node);} else {if (noteType == Node.TEXT_NODE) {System.out.println(node.getTextContent());} else {if (noteType == Node.COMMENT_NODE) {System.out.println("<!--"+node.getTextContent() + "-->");}}}}System.out.println("</" +name+ ">");}
}

SAX

public class SAXHandler extends DefaultHandler{private String currentElement;private String currentValue;private String attrName;private String attrValue;@Overridepublic void startElement(String uri, String localName,String qName, Attributes attributes) {currentElement = qName;for (int i = 0; i < attributes.getLength(); i++) {attrName = attributes.getQName(i);attrValue = attributes.getValue(i);System.out.println("属性:" + attrName + "=" + attrValue);}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {currentValue = new String(ch,start,length);System.out.println("characters开始" + currentValue);}@Overridepublic void endElement(String uri, String localName, String qName) {if (currentElement.equals(qName)) {System.out.println(currentElement + "=" + currentValue);}}
}public static void main(String[] args) throws Exception {SAXParserFactory spf = SAXParserFactory.newInstance();SAXParser sp = spf.newSAXParser();SAXHandler handler = new SAXHandler();sp.parse(new File("dubbo.xml"), handler);}

  

而jdom和dom4j则是针对底层接口的延伸,且这2个接口都只是面向java语言。

jdom

dom4j

上诉这3个方式都封装好了对xml文件的操作功能,而且基本的方法都大同小异。

由于jdom对于大型的xml文件存在内存溢出的问题,所以现在市面上比较流行的是dom4j的方式来操作。

但实际上dom4j最早只是一个jdom的延伸,当初jdom由于是针对实现变成,灵活性不足,所以才有了后来的dom4j。

转载于:https://www.cnblogs.com/culushitai/p/8534110.html

针对xml文件做提取与写入的操作相关推荐

  1. python下最全的cv2图像处理入门知识!!!!灰度图 RGB图 针对某种颜色做提取、高斯模糊等等

    早些时候实验的关于图像的知识,一直放着感觉发挥不出它的作用,故自己将它发上来,大家可以看看. 1.头文件 import cv2 import numpy from scipy.misc import ...

  2. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File; import java.util.ArrayList; import java.util.L ...

  3. .NET 3.5(14) - XLINQ(LINQ to XML)之针对XML文件的添加、查询、更新和删除

    步步为营VS 2008 + .NET 3.5(14) - XLINQ(LINQ to XML)之针对XML文件的添加.查询.更新和删除 作者:webabcd 介绍 以某一XML文件为例,XLINQ(L ...

  4. asp.net 对xml文件的读写,添加,修改,删除操作

    asp.net 对xml文件的读写,添加,修改,删除操作 下面有代码调试正确 using System; using System.Collections; using System.Componen ...

  5. XML文件转换成字符串互相转换操作

    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();//新建对象 doc.Load("filePath");//XM ...

  6. 用“XML解析开发包Jaxp”对XML文件进行Dom方式的CRUD操作

    IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结! package edu.jaxp; import java.io.FileNotFoundException; import j ...

  7. Java读取Excel文件并将之写入数据库操作

    一.添加需要的包依赖 <!--读取excel文件所需要的包--> <dependency><groupId>org.apache.poi</groupId&g ...

  8. 利用matlab对xml文件进行批量处理

    本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.c ...

  9. XML文件处理——XML文件简介

    SAR成像处理软件经常使用XML文件进行参数传递,这里简单介绍一下XML文件.然后下面以代码段的形式分别介绍PugiXML和tinyXML两种工具对XML文件读写改查增删等操作. XML:可扩展标记语 ...

最新文章

  1. Delphi中的线程类
  2. Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
  3. [云炬创业学笔记]第一章创业是什么测试5
  4. 【Android】Camera 使用浅析
  5. centos中的配置文件
  6. Flutter之window系统下配置开发环境以及在Android Studio里面运行hello word
  7. python os.listdir列举当前文件夹下所有文件及文件夹
  8. 谷歌笔试题(Google十二岁生日晚)
  9. AttributeError: type object ‘Image‘ has no attribute ‘open‘
  10. YOLOv5在建筑工地中安全帽佩戴检测的应用(已开源+数据集)
  11. 成功的人都很会控制自己的情绪
  12. 为什么世界上没有安全的工作
  13. vc调用matlab引擎实时绘图,怎么在vc++里调用matlab绘制spline插值曲线
  14. 各国市场分析(越南,智利)
  15. 华为方舟编译器做了些什么,让安卓有了“丝滑”的感觉 ?
  16. 最新小笑授权系统源码V6.5+开心免授权版
  17. java double丢失精度问题,加减乘除计算出错出现99999
  18. 自然语言处理之神经网络基础
  19. 我把csdn版权标志隐藏了.
  20. HashMap底层详讲

热门文章

  1. crm系统是什么很棒ec实力_易观发布2019中国CRM实力矩阵,EC成为领先者
  2. 电商库存锁_解密 Redis 助力双 11 背后电商秒杀系统
  3. python sys.path
  4. VSCode Vim
  5. Pandas Groupby ApplyAgg
  6. TensorFlow tf.keras.layers.DenseFeatures
  7. 机器学习 正则化(regularization)
  8. Pandas 文本数据方法 wrap( )
  9. Pandas 基本文本数据处理
  10. Spring Cloud与微服务学习总结(2)——Spring Cloud相较于Dubbo等RPC服务框架的优势