XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。今天主要是介绍java中常用的四种解析XML的方法.

假设我们XML的内容和结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<HD>     <disk name="C">     <capacity>4G</capacity>     <directories>100</directories>     <files>1580</files>     </disk>     <disk name="D">     <capacity>10G</capacity>     <directories>300</directories>     <files>1500</files>     </disk>
</HD>

一.DOM

用DOM来解析XML文件的操作比较简单,它的解析过程是先将XML文件读入内存,建立一棵文档树,通过对这颗文档树来操作来完成对XML文件的操作.

优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;

缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU),且操作数据时要做大量的遍历树的操作,这对于大量数据的存取,修改操作率不高,但是对于小数据的一般性应用场合,用DOM来处理已经足够.

DOM解析:

package DOM;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import  org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class domXml {public static void main(String[] args) throws Exception{//得到DOM解析器的工厂实例DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();//从DOM工厂中获得DOM解析器DocumentBuilder dbBuilder=dbFactory.newDocumentBuilder();//声明为file为了识别中文名Document document=null;document=dbBuilder.parse("D:/app/AnalysisXML/src/DOM/test.xml");//得到文档名称为test的元素的节点列表NodeList list =document.getElementsByTagName("disk");//遍历该集合,显示结合中的元素及其子元素的名字for(int i=0;i<list.getLength();i++){Element element=(Element)list.item(i);String name=element.getAttribute("name");  String capacity=element.getElementsByTagName("capacity").item(0).getFirstChild().getNodeValue();  String directories=element.getElementsByTagName("directories").item(0).getFirstChild().getNodeValue();  String files=element.getElementsByTagName("files").item(0).getFirstChild().getNodeValue();  System.out.println("磁盘信息:");   System.out.println("分区盘符:"+name);   System.out.println("分区容量:"+capacity);   System.out.println("目录数:"+directories);   System.out.println("文件数:"+files);   System.out.println("-----------------------------------"); }}}

二.SAX

SAX是Simple API for XML的缩写,这并非官方标准,而是由网上社区讨论而产生的标准,几乎所有的XML解析器都会支持.SAX是指一种接口,或者一个软件包。也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式,用SAX解析XML文件,无须将文档读入内存.当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因此使用者所需要做的工作就是在相应的事件方法中加入程序代码.因而SAX接口也被称作事件驱动接口。

SAX解析:

test.java

package DOM;public class test {private String  name;private String capacity;private String directories;private  String files;public String Getname(){return name;}public void Setname(String name){this.name=name;}public String Getcapacity(){return capacity;}public void Setcapacity(String capacity){this.capacity=capacity;}public String Getdirectories(){return directories;}public void Setdirectories(String directories){this.directories=directories;}public String Getfiles(){return files;}public void Setfiles(String files){this.files=files;}
}

SAX 解释XML:

package DOM;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;  import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;  import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import DOM.test;public class Saxxmltest {public static void main(String[] args) throws Exception {//解析器的获取  //1、获取sax解析工厂  SAXParserFactory  sf = SAXParserFactory.newInstance();  //2、获取解析器  SAXParser sp = sf.newSAXParser();  //创建xml文件的输入流  InputStream inStream = SaxParseService.class.getClassLoader().getResourceAsStream("DOM/test.xml");  //3、解析xml文件,将事件处理器传入。  sp.parse(inStream, new Myhander());  }
}class Myhander extends DefaultHandler{private List<test> hd=null;private test disk=null;private String preTag =null; //作用是记录解析时的上一个节点名称public void startDocument() throws SAXException{hd=new ArrayList<test>();}public void startElement(String uriString,String localName,String qName,Attributes attributes) throws SAXException{if("disk".equals(qName)){disk=new test ();disk.Setname(attributes.getValue(0));}preTag=qName;}public void characters(char[] ch,int start,int length)throws SAXException{if(preTag!=null){String contentString=new String(ch,start,length );if("capacity".equals(preTag)){  disk.Setcapacity(contentString);}  else if("directories".equals(preTag)){  disk.Setdirectories(contentString);}else if("files".equals(preTag)){  disk.Setfiles(contentString);}}}public void endElement(String uri,String localName,String qName) throws SAXException{if("disk".equals(qName)){hd.add(disk );disk=null;}preTag=null;}public void endDocument() throws SAXException {  for (test disk : hd) {  System.out.println("磁盘信息:");   System.out.println("分区盘符:"+disk.Getname());   System.out.println("分区容量:"+disk.Getcapacity());   System.out.println("目录数:"+disk.Getdirectories());   System.out.println("文件数:"+disk.Getfiles());   System.out.println("-----------------------------------"); }}}

三.DOM4j

DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。dom4j的开发包中包含一些第三方开发包,当调用dom4j某些功能需要添加相应的开发包,大部分情况下,在项目中导入基本的dom4j.jar即可。

DOM4J解析:

package DOM;
import java.util.Iterator;  import org.apache.naming.java.javaURLContextFactory;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jXML {public static void main(String[] args) throws Exception{//创建文件对象java.io.File file=new java.io.File("D:/app/AnalysisXML/src/DOM/test.xml");//创建一个读取XML文件的对象SAXReader reader=new SAXReader();//创建一个文档对象Document document=reader.read(file);//获取文件的根节点Element element=document.getRootElement();for(Iterator i=element.elementIterator("disk");i.hasNext();){//获取节点元素element =(Element)i.next();String name=element.attributeValue("name");  String capacity=element.elementText("capacity");//取disk子元素capacity的内容   String directories=element.elementText("directories");   String files=element.elementText("files");   System.out.println("磁盘信息:");   System.out.println("分区盘符:"+name);   System.out.println("分区容量:"+capacity);   System.out.println("目录数:"+directories);   System.out.println("文件数:"+files);   System.out.println("-----------------------------------");   }}
}

四.JDOM

jdom解析xml,是基于树型结构,其利用的是纯java技术,实现对xml文档的各种操作。jdom可以说是直接为java编程服务的,把sax与dom的功能有效的结合起来。JDOM应用程序的长度通常是DOM应用程序的三分之一,大约是SAX应用程序的一般.

优点:20-80原则,极大减少了代码量。

使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。

JDOM解析XML:

package DOM;import  java.util.List;import javax.servlet.jsp.PageContext;import org.jdom.*;
import org.jdom.input.*;  public class JDomXML {public static void main (String[] args)throws Exception{SAXBuilder sBuilder=new SAXBuilder();Document document=sBuilder.build("src/DOM/test.xml"); //构造文档对象  Element rootElement=document.getRootElement();//获取根元素List<Element> list=rootElement.getChildren("disk");//获取名字为disk的所有元素     for(int i=0;i<list.size();i++)  //遍历根元素的子元素集合{        Element element=(Element)list.get(i);String name=element.getAttributeValue("name");   String capacity=element.getChildText("capacity");//取disk子元素capacity的内容   String directories=element.getChildText("directories");   String files=element.getChildText("files");   System.out.println("磁盘信息:");   System.out.println("分区盘符:"+name);   System.out.println("分区容量:"+capacity);   System.out.println("目录数:"+directories);   System.out.println("文件数:"+files);   System.out.println("-----------------------------------");   }}}

五.解析结果

六.总结

XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。XML的解析,可以更加自己的数据量的大小,选择不同的解析类型,同时提高解析效率!

Java 常用功能三--解析XML相关推荐

  1. java解析xml实例_在java中使用dom解析xml的示例分析

    本篇文章介绍了,在java中使用dom解析xml的示例分析.需要的朋友参考下 dom是个功能强大的解析工具,适用于小文档 为什么这么说呢?因为它会把整篇xml文档装载进内存中,形成一颗文档对象树 总之 ...

  2. JAVA中利用DOM解析XML文档

    JAVA中利用DOM解析XML文档 package org.sws.utils; import java.io.File;import java.io.IOException; import java ...

  3. java使用SAX接口解析xml文件

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用SAX接口解析xml文件.实现解析类,从xml解析开始到结尾,每一步均会触发对象的重载函数. 测试代码,将book1.xml改成你自己 ...

  4. java使用xpath解析xml,java如何使用xpath解析xml

    java如何使用xpath解析xml 发布时间:2020-12-08 12:28:00 来源:亿速云 阅读:60 作者:小新 这篇文章给大家分享的是有关java如何使用xpath解析xml的内容.小编 ...

  5. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  6. Java框架开发基础-解析XML文件

    认识XML |----XML编写要求: XML声明: 1.XML声明用于指明当前文件为XML文件,文件采用的XML版本和编码. 2.<?xml version="1.0" e ...

  7. Java JDOM生成和解析XML

    一)JDOM介绍 使用方式:需要下载jdom对应的jar引入 <dependency><groupId>org.jdom</groupId><artifact ...

  8. 程序猿二三事之工具使用-Eclipse调试Java常用功能介绍

    [ TOC ] 调试常用功能介绍 日常java开发中实际写代码的时间并不会很多,花在整理思路,代码重构,调试bug会占用很大部分时间. 熟练掌握调试工具,了解调试相关技巧,是java开发中减少调试时间 ...

  9. Java常用spark的pom.xml与读取csv为rdd到最终join操作+java常用pom.xml文件

    能进行join的只能是: JavaPairRDD --------------------------------------------------------------------第一种方案-- ...

最新文章

  1. mysql内连接运算量会增加多少_新年手打,40道经典MYSQL面试干货,速来收藏
  2. ASP.NET 2.0 正式版中无刷新页面(客户端回调)的开发
  3. node:jwt、拦截器-学习笔记
  4. CentOS 7.8使用devtoolset-9使用高版本gcc version 9.3.1
  5. 接口规范 14.转码接口
  6. 【Oracle】sqlplus中 删除键backspace时出现^H
  7. 无法Debug SQL: Unable to start T-SQL Debugging. Could not attach to SQL Server process on
  8. 【转】listView中,checkBox的显示和隐藏
  9. nodejs如何实现ajax,nodejs + express怎么实现Ajax方式及其简单功能
  10. UVa 10499 - The Land of Justice
  11. WP7开发解惑(转载)
  12. win7网络找不到局域网计算机名,教你操作win7系统局域网内找不到其他电脑的解决方法...
  13. 网络概念- IPRAN的含义及来历——转载
  14. ssm+java农村快递代取平台52wxh(程序+lw+源码+远程部署)
  15. 商业银行个人客户价值指标体系
  16. 【Minio】实现视频断点续传功能
  17. matlab 求矩阵秩,用MATLAB编程求矩阵的秩
  18. 简单讲解单片机数据、地址、控制总线结构
  19. 清华大学张长水教授:机器学习和图像识别(附视频、PPT下载)
  20. 交换机端口及常见的网络端口

热门文章

  1. java script 截断_JavaScript截取字符串的最后几个字符
  2. 【2022/01/21】thinkphp源码无差别阅读(二十五)
  3. android widget 布局,Android Widget Attributes——View
  4. vue项目实现会议预约(包含某天的某个时间段和某月的某几天)
  5. happens-before规则
  6. 健身房管理系统一站式智能化健身管理体验
  7. windows照片查看器没了_完爆Windows默认看图程序,你确定不来一打?
  8. c语言中5 2 11 意思,新概念第二册课后题答案详解:Lesson55
  9. Robosense速腾激光雷达如何使用多雷达
  10. 如何进行企业知识管理?