归纳总结Java解析XML主要有四中方式,分别是DOM、SAX、JDOM和DOM4J。其中DOM和SAX是官方包自带,另外两个JDOM和DOM4J是第三方包。

一、此篇测试代码用到的XML情况 。

1、XML内容展示

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <class>
3 <people>
4 <name>Jack</name>
5 <age>19</age>
6 <sex>male</sex>
7 <job>student</job>
8 </people>
9 <people>
10 <name>Merry</name>
11 <age>26</age>
12 <sex>female</sex>
13 <job>teacher</job>
14 </people>
15 </class>

2、所在项目位置

二、几种方式

1、DOM方式

  代码及运行结果,已省略类名及main函数代码。

 1 import org.w3c.dom.Document;
2 import org.w3c.dom.Element;
3 import org.w3c.dom.Node;
4 import org.w3c.dom.NodeList;
5 import org.xml.sax.SAXException;
6 import javax.xml.parsers.DocumentBuilder;
7 import javax.xml.parsers.DocumentBuilderFactory;
8 import javax.xml.parsers.ParserConfigurationException;
9 import java.io.File;
10 import java.io.IOException;
11 /**
12 * Create by 摩诘 on 2020/4/5 02:00
13 */
14 try {
15 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
16 DocumentBuilder builder = factory.newDocumentBuilder();
17 String path = HelloWorld.class.getClassLoader().getResource("config/peoples.xml").getPath();
18 File file = new File(path);
19 Document document = builder.parse(file);
20 // 获取节点People集合
21 NodeList nodeList = document.getElementsByTagName("people");
22 for (int i = 0; i < nodeList.getLength(); i++) {
23 // Element element=(Element) nodeList.item(i);
24 // NodeList childNodes=element.getChildNodes();
25 Node node = nodeList.item(i);
26 NodeList childNodes = node.getChildNodes();
27 for (int j = 0; j < childNodes.getLength(); j++) {
28 Node childNode = childNodes.item(j);
29 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
30 // 获取节点名称
31 // 获取对应节点包含的值
32 System.out.println(childNode.getNodeName() + ":" + childNode.getFirstChild().getNodeValue());
33 }
34 }
35 System.out.println("************************");
36 }
37 } catch (ParserConfigurationException ex) {
38 //ex.printStackTrace();
39 System.out.println("Error : " + ex.toString());
40 } catch (IOException ex) {
41 //ex.printStackTrace();
42 System.out.println("Error : " + ex.toString());
43 } catch (SAXException ex) {
44 //ex.printStackTrace();
45 System.out.println("Error : " + ex.toString());
46 }

2、SAX方式

  运行效率和内存使用方面最优的是SAX,但是由于SAX是基于事件的方式,所以SAX无法在编写XML的过程中对已编写内容进行修改,但对于不用进行频繁修改的需求,还是应该选择使用SAX。测试代码主要使用到两个类,一个主函数类HelloWorld,一个SAXHandler继承DefaultHandler并重写方法。

 1 import org.xml.sax.helpers.DefaultHandler;
2 import javax.xml.parsers.SAXParser;
3 import javax.xml.parsers.SAXParserFactory;
4 /**
5 * Create by 摩诘 on 2020/4/5 17:30
6 */
7 public class HelloWorld {
8 public static void main(String[] args) throws Exception{
9 SAXParserFactory factory=SAXParserFactory.newInstance();
10 SAXParser saxParser=factory.newSAXParser();
11 DefaultHandler handel=new SAXHandler();
12 saxParser.parse("src/config/peoples.xml",handel);
13 }
14 }
 1 import org.xml.sax.Attributes;
2 import org.xml.sax.SAXException;
3 import org.xml.sax.helpers.DefaultHandler;
4 /**
5 * Create by 摩诘 on 2020/4/5 17:30
6 */
7 public class SAXHandler extends DefaultHandler {
8 @Override
9 public void startDocument() throws SAXException {
10 super.startDocument();
11 System.out.println("XML解析开始");
12 }
13
14 @Override
15 public void endDocument() throws SAXException {
16 super.endDocument();
17 System.out.println("XML解析结束");
18 }
19
20 @Override
21 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
22 super.startElement(uri, localName, qName, attributes);
23 if(qName.equals("people")){
24 System.out.println("*************开始遍历poople*************");
25 }else if(!qName.equals("people")&&!qName.equals("class")){
26 System.out.println("节点名称:"+qName);
27 }
28 }
29
30 @Override
31 public void endElement(String uri, String localName, String qName) throws SAXException {
32 super.endElement(uri, localName, qName);
33 if(qName.equals("people")){
34 System.out.println(qName+"遍历结束");
35 System.out.println("************结束遍历people**************");
36 }
37 }
38
39 @Override
40 public void characters(char[] ch, int start, int length) throws SAXException {
41 super.characters(ch, start, length);
42 String value=new String(ch,start,length).trim();
43 if(!value.equals("")){
44 System.out.println(value);
45 }
46 }
47 }

3、JDOM方式

  这种方式为三方包,包地址:https://mvnrepository.com/search?q=jdom,通过构建maven项目引用,maven安装与配置:https://blog.csdn.net/github_37759996/article/details/90748461,创建maven Java程序:https://blog.csdn.net/YF_Li123/article/details/79953731?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1,上代码。

 1 import org.jdom2.Document;
2 import org.jdom2.Element;
3 import org.jdom2.input.SAXBuilder;
4 import org.jdom2.JDOMException;
5 import java.io.*;
6 import java.util.List;
7
8 /**
9 * Create by 摩诘 on 2020/5/2 21:38
10 */
11 public class HelloWorld {
12 public static void main(String[] args) {
13 SAXBuilder saxBuilder=new SAXBuilder();
14 InputStream in;
15 try{
16 in=new FileInputStream(new File("src\\config\\peoples.xml"));
17 Document document=saxBuilder.build(in);
18 Element rootElement=document.getRootElement();
19 List<Element> peopleList=rootElement.getChildren();
20 for (Element people:peopleList){
21 List<Element> childernList=people.getChildren();
22 for (Element childern:childernList){
23 System.out.println("2");
24 System.out.println(childern.getName()+":"+childern.getValue());
25 }
26 }
27 }catch(FileNotFoundException e){
28 e.printStackTrace();
29 }catch(JDOMException e){
30 e.printStackTrace();
31 }catch(IOException e){
32 e.printStackTrace();
33 }
34 }
35 }

4、DOM4J

  三方包,引用方式与JDOM方式类似。看代码

 1 import org.dom4j.Attribute;
2 import org.dom4j.Document;
3 import org.dom4j.Element;
4 import org.dom4j.io.SAXReader;
5 import java.io.File;
6 import java.util.Iterator;
7 import java.util.List;
8 /**
9 * Create by 摩诘 on 2020/5/2 22:07
10 */
11 public class HelloWorld {
12 public static void main(String[] args) {
13 SAXReader reader = new SAXReader();
14 try{
15 Document document = reader.read(new File("src/config/peoples.xml"));
16 Element rootElement = document.getRootElement();
17 Iterator iterator = rootElement.elementIterator();
18 while (iterator.hasNext()){
19 Element stu = (Element) iterator.next();
20 List<Attribute> attributes = stu.attributes();
21 System.out.println("======获取属性值======");
22 for (Attribute attribute : attributes) {
23 System.out.println(attribute.getValue());
24 }
25 System.out.println("======遍历子节点======");
26 Iterator iterator1 = stu.elementIterator();
27 while (iterator1.hasNext()){
28 Element stuChild = (Element) iterator1.next();
29 System.out.println("节点名:"+stuChild.getName()+"---节点值:"+stuChild.getStringValue());
30 }
31 }
32 }catch (Exception e){
33 e.printStackTrace();
34 }
35 }
36 }

三、整理参考了以下链接文章

https://www.jb51.net/article/115316.htm

https://blog.csdn.net/m0_37499059/article/details/80505567

  

Java 解析XML的几种方式:DOM、SAX、JDOM和DOM4J。的更多相关文章

  1. java解析xml的几种方式

    java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...

  2. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  3. JAVA解析xml的五种方式比较

     1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ① ...

  4. java解析xml文件四种方式

    1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找 ...

  5. JAVA解析xml的四种方式比较

    1)DOM解析 DOM是html和xml的应用程序接口(API),以层次结构(类似于树型)来组织节点和信息片段,映射XML文档的结构,允许获取 和操作文档的任意部分,是W3C的官方标准 [优点] ①允 ...

  6. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  7. 【Java】详解Java解析XML的四种方法

    XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法. AD: XML现在已经成为一种通用的数据交换格式,它的平台无关性,语 ...

  8. Java解析XML的四种方法详解 - 转载

    XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML.本文将详细介绍用Java解析XML的四种方法 在做一般的XML数据交换过程中,我更乐意传递XML字符串,而不是格式化 ...

  9. 横向对比分析Python解析XML的四种方式

    横向对比分析Python解析XML的四种方式 在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受. 在网络搜 ...

  10. 解析XML的几种方式:DOM、SAX、PULL

    DOM解析 解析器读入整个文档,然后构建一个主流内存的树结构,然后代码就可以使用dom接口来操作这个树结构. 优点: 整个文档树在内存中,便于操作:支持删除.修改.重新排列等多种功能. 通过树形结构存 ...

随机推荐

  1. 【单片机】初次实验:Keil51的使用

    哔哩哔哩/CSDN/博客园:萌狼蓝天 延时器 delay(int count){ int i,j; for(i=0;i<count;i++){ for(j=0;j<1000;j++); } ...

  2. Composer: Command Not Found

    I am using CentOS and had same problem. I changed /usr/local/bin/composer to /usr/bin/composer and i ...

  3. Qt编写安防视频监控系统59-子模块3图文警情

    一.前言 图文警情子模块是为了适应现在各种人脸识别报警应用而增加的,参照现在各种视频监控手机app报警提示信息,基本上都是带了时间.内容.图片缩略图(单击可以查看大图),这种信息排列形式在现代的软件中 ...

  4. Pycharm IDE中导入和移除python项目

    1.Pycharm导入python项目 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的python才可以正常运行: ...

  5. 万字长文:手把手教你实现一套高效的IM长连接自适应心跳保活机制

    本文作者"Carson",现就职于腾讯公司,原题"高效保活长连接:手把手教你实现自适应的心跳保活机制",有较多修订和改动. 1.引言 当要实现IM即时通讯聊天. ...

  6. springboot~多节点应用里的雪花算法唯一性

    雪花算法的唯一性,在单个节点中是可以保证的,对应kubernetes中的应用,如果是横向扩展后,进行多副本的情况下,可能出现重复的ID,这需要我们按着pod_name进行一个workId的生成,我还是 ...

  7. linux下VEP的安装

    VEP(Variant Effect Predictor)作为Ensembl官方推出的变异影响预测软件,被广泛使用,以下内容也来自Ensembl 软件包下载(ZIP格式): curl -L-Ohttp ...

  8. (一).NET 6.0 Swagger添加文档注释

    1.先给api加上标题注释和返回值注释 2.右键项目属性找到生成中的输出 勾选完成以后重新生成项目 3.在Program项目启动类中编写代码 4.最终效果如下

  9. Solution -「ZJOI 2018」「洛谷 P4338」历史

    \(\mathscr{Description}\)   Link.   给定一棵以 \(1\) 为根的树,点 \(u\) 有非负点权 \(a_u\).   定义 \(u\) 的一次染色的代价为:路径 ...

  10. CDS标准视图:维护通知数据 I_PMNotifMaintenanceData

    视图名称:维护通知数据 I_PMNotifMaintenanceData 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Notification Mainte ...