java中xml操作的几种方法及特点_在java中解析xml主要有哪几种方式?都有哪些优点?...-程序员宅基地

技术标签: java中xml操作的几种方法及特点  

在时代的不断更迭进化中,越来越多的人开始意识到新兴技术的重要性,开始投入到新技术的使用当中来。今天就为大家介绍一下在java中解析xml的主要方式以及这些方式都有哪些优点。一起来看看吧。

首先说一下在java中解析xml主要有下面四种方式,并展示代码。xml文件代码如下:<?xml  version="1.0" encoding="utf-8" ?>

cxx1

Bob1

stars1

85

cxx2

Bob2

stars2

85

cxx3

Bob3

stars3

85

一、DOM方式,代码如下所示:package com.cxx.xml;

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

/**

* @Author: cxx

* Dom操作xml

* @Date: 2018/5/29 20:19

*/

public class DomDemo

{

//用Element方式

public static void element(NodeList list)

{

for (int i = 0; i 

{

Element element = (Element) list.item(i);

NodeList childNodes = element.getChildNodes();

for (int j = 0; j 

{

if (childNodes.item(j)

.getNodeType() == Node.ELEMENT_NODE)

{

//获取节点

System.out.print(childNodes.item(j)

.getNodeName() + ":");

//获取节点值

System.out.println(childNodes.item(j)

.getFirstChild()

.getNodeValue());

}

}

}

}

public static void node(NodeList list)

{

for (int i = 0; i 

{

Node node = list.item(i);

NodeList childNodes = node.getChildNodes();

for (int j = 0; j 

{

if (childNodes.item(j)

.getNodeType() == Node.ELEMENT_NODE)

{

System.out.print(childNodes.item(j)

.getNodeName() + ":");

System.out.println(childNodes.item(j)

.getFirstChild()

.getNodeValue());

}

}

}

}

public static void main(String[] args)

{

//1.创建DocumentBuilderFactory对象

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

//2.创建DocumentBuilder对象

try

{

DocumentBuilder builder = factory.newDocumentBuilder();

Document d = builder.parse("src/main/resources/demo.xml");

NodeList sList = d.getElementsByTagName("student");

//element(sList);

node(sList);

}

catch (Exception e)

{

e.printStackTrace();

}

}

}

运行结果如下图:

8da2b21eb644038c32e533259583d2c3.png

二、SAX方式,代码如下所示:package com.cxx.xml;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

/**

* @Author: cxx

* SAX解析DOM

* 一行一行  Handler

* startElement

* endElement

* @Date: 2018/5/29 20:03

*/

public class SaxDemo

{

public static void main(String[] args) throws Exception

{

//1.或去SAXParserFactory实例

SAXParserFactory factory = SAXParserFactory.newInstance();

//2.获取SAXparser实例

SAXParser saxParser = factory.newSAXParser();

//创建Handel对象

SAXDemoHandel handel = new SAXDemoHandel();

saxParser.parse("src/main/resources/demo.xml", handel);

}

}

class SAXDemoHandel extends DefaultHandler

{

//遍历xml文件开始标签

@Override

public void startDocument() throws SAXException

{

super.startDocument();

System.out.println("sax解析开始");

}

//遍历xml文件结束标签

@Override

public void endDocument() throws SAXException

{

super.endDocument();

System.out.println("sax解析结束");

}

@Override

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException

{

super.startElement(uri, localName, qName, attributes);

if (qName.equals("student"))

{

System.out.println("============开始遍历student=============");

//System.out.println(attributes.getValue("rollno"));

}

else if (!qName.equals("student") && !qName.equals("class"))

{

System.out.print("节点名称:" + qName + "----");

}

}

@Override

public void endElement(String uri, String localName, String qName) throws SAXException

{

super.endElement(uri, localName, qName);

if (qName.equals("student"))

{

System.out.println(qName + "遍历结束");

System.out.println("============结束遍历student=============");

}

}

@Override

public void characters(char[] ch, int start, int length) throws SAXException

{

super.characters(ch, start, length);

String value = new String(ch, start, length)

.trim();

if (!value.equals(""))

{

System.out.println(value);

}

}

}

运行结果如下图:

e3ba4eebd71ebe78258a9c236ca2c8a9.png

三、JDOM方式,代码如下所示:

org.jdom

jdom

1.1.3

package com.cxx.xml;

import org.jdom.Attribute;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.input.SAXBuilder;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.InputStream;

import java.util.List;

/**

* @Author: cxx

* JDom解析xml

* 快速开发XML应用程序。

* 是一个开源项目

* JDOM主要用来弥补DOM和SAX在实际应用当中的不足。

* @Date: 2018/5/30 11:44

*/

public class JDomDemo

{

public static void main(String[] args) throws Exception

{

//1.创建SAXBuilder对象

SAXBuilder saxBuilder = new SAXBuilder();

//2.创建输入流

InputStream is = new FileInputStream(new File("src/main/resources/demo.xml"));

//3.将输入流加载到build中

Document document = saxBuilder.build(is);

//4.获取根节点

Element rootElement = document.getRootElement();

//5.获取子节点

List  children = rootElement.getChildren();

for (Element child: children)

{

System.out.println("通过rollno获取属性值:" + child.getAttribute("rollno"));

List  attributes = child.getAttributes();

//打印属性

for (Attribute attr: attributes)

{

System.out.println(attr.getName() + ":" + attr.getValue());

}

List  childrenList = child.getChildren();

System.out.println("======获取子节点-start======");

for (Element o: childrenList)

{

System.out.println("节点名:" + o.getName() + "---" + "节点值:" + o.getValue());

}

System.out.println("======获取子节点-end======");

}

}

}

运行结果如下图:

aa07139891dbd2452a2c7c3f4640e21f.png

四、DOM4J方式,代码如下所示:

dom4j

dom4j

1.6.1

package com.cxx.xml;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import java.io.File;

import java.util.Iterator;

import java.util.List;

/**

* @Author: cxx

* Dom4j解析xml

* @Date: 2018/5/30 12:21

*/

public class Dom4JDemo

{

public static void main(String[] args) throws Exception

{

//1.创建Reader对象

SAXReader reader = new SAXReader();

//2.加载xml

Document document = reader.read(new File("src/main/resources/demo.xml"));

//3.获取根节点

Element rootElement = document.getRootElement();

Iterator iterator = rootElement.elementIterator();

while (iterator.hasNext())

{

Element stu = (Element) iterator.next();

List  attributes = stu.attributes();

System.out.println("======获取属性值======");

for (Attribute attribute: attributes)

{

System.out.println(attribute.getValue());

}

System.out.println("======遍历子节点======");

Iterator iterator1 = stu.elementIterator();

while (iterator1.hasNext())

{

Element stuChild = (Element) iterator1.next();

System.out.println("节点名:" + stuChild.getName() + "---节点值:" + stuChild.getStringValue());

}

}

}

}

运行结果如下图:

dbf82baade6b083a9bb72a3c54b6eab1.png

接下来再看一下这四种方式都有哪些优点。

1.DOM方式,形成了树结构,直观容易理解,方便编写代码;解析过程中将树结构保留在内存中,便于修改;

2.SAX方式,采用事件驱动模式,减小内存的耗费,当只需要处理xml中的数据时使用比较方便;

3.JDOM方式,只使用具体类而不用接口,API大量使用了collections类;

4.DOM4J方式,JDOM的一种智能分支,它合并了许多超出基本xml文档表示的功能,使用接口和抽象基本类方法,是一个非常优秀的java xml

API,它的性能优异,灵活性好,功能强大,非常便于使用,也是一个开放源代码的软件。

以上就是关于在java中解析xml的主要方式以及这些方式都有哪些优点的主要内容。如果你对java知识感兴趣,想要了解更多java基础以及java经典例子,敬请关注奇Q工具网。

推荐阅读;

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34479122/article/details/114229021

智能推荐

Java面试题系列——JavaSE面试题(集合二)_javase 面试题-程序员宅基地

文章浏览阅读3.8k次。Java面试题系列——JavaSE面试题(集合二)_javase 面试题

大学生体质测试管理 毕业设计源码42047-程序员宅基地

文章浏览阅读796次,点赞21次,收藏21次。本系统有管理员、学生用户。管理员:后台首页、个人资料(个人信息、修改密码)、轮播图、公告信息管理、系统用户(管理员、学生用户)、交流管理(论坛列表、论坛分类列表)模块管理(目标信息、目标记录、学习科普、学习类别)。学生用户;首页、我的(个人信息、我的账户、我的收藏)、交流论坛、公告信息、目标信息、学习科普等功能模块。

01.JS的进阶——基础总结与深入_console.log(b1.b2[2]()) ;// 'abc' undefined-程序员宅基地

文章浏览阅读86次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档目录1.数据类型2.数据类型23.数据_变量_内存14.数据_变量_内存25.数据_变量_内存36.数据_变量_内存47.数据_变量_内存58.对象9.对象210.函数11.回调函数12.IIFE立即执行函数13.函数中的this总结1.数据类型<!DOCTYPE html><html> <head> <meta cha._console.log(b1.b2[2]()) ;// 'abc' undefined

hdu 2243 考研路茫茫——单词情结-程序员宅基地

文章浏览阅读5.3k次。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2243题目大意:问长度为1~N的串中包含了模式串的串总共有几个。题目思路:求出长度不大于l的包含模式串的字符串数,方法是改求不包含模式串的字符串总数,当然先要处理出总的字符串个数,可以用矩阵也可以用二分幂和的方法。而求不包含模式串的字符串数同样是构造矩阵,同时还要建立一个虚结点,储存长度小于l的_hdu 2243

ad导出元件清单_【教程】PADS如何导出SMT贴片机用的坐标文件-程序员宅基地

文章浏览阅读1.6k次。步骤0, 本教程必须先添加脚本注意: 本教程需要使用脚本, 脚本可在这个帖子中下载: http://club.szlcsc.com/article/details_1940_1.html //(就不再本帖中贴出附件,脚本可能会有更新,到时多处修改很麻烦)添加脚本的方式:注意: 脚本的存放路径必须 和 PADS自带的脚本 放在相同路径下.添加完成后:简述步骤: 设置左下角为原点; 工具-..._ad出贴片清单

[Kubernetes]K8S中的Service实现方式以及IPVS介绍_kubernetes service ipvs-程序员宅基地

文章浏览阅读685次。service通过什么方式实现的?正常情况下,service是一个抽象的概念,它是通过调用iptables工具实现的pod之间的通信,而iptables是系统内核netfiter模块的一个工具,主要是用来管理一张端口转发表,每一次的转发都需要轮询一遍转发表,因此,当集群数量较大的时候,相应的转发性能会下降。所以在kubernets1.11版本以后,将IPVS引入GA,通过IPVS实现SVC。实现service功能,通过kube-proxy,是kubernets核心组件,能否替代?常见概念_kubernetes service ipvs

随便推点

Cortex-M3双堆栈MSP和PSP_stm32 msp psp-程序员宅基地

文章浏览阅读5.5k次,点赞19次,收藏78次。什么是栈?在谈M3堆栈之前我们先回忆一下数据结构中的栈。栈是一种先进后出的数据结构(类似于枪支的弹夹,先放入的子弹最后打出,后放入的子弹先打出)。M3内核的堆栈也不例外,也是先进后出的。栈的作用?局部变量内存的开销,函数的调用都离不开栈。了解了栈的概念和基本作用后我们来看M3的双堆栈栈cortex-M3内核使用了双堆栈,即MSP和PSP,这极大的方便了OS的设计。MSP的含义是Main..._stm32 msp psp

计算机图形学绘图程序设计_绘图程序计算机图形学-程序员宅基地

文章浏览阅读1.6k次。VC++的图形工作方式物理坐标系设备场景MFC中的设备场景CDC类的部分成员函数Windows的图形对象1.建立图形对象2.对该对象进行初始化3.将该对象选入当前设备场景,并保留初始对象4.画图5.恢复原始对象实例实验一 二维图形绘制金刚石一笔绘三种方法..._绘图程序计算机图形学

数字证书及CA的扫盲介绍_rsa和ca的区别-程序员宅基地

文章浏览阅读751次。★ 先说一个通俗的例子  考虑到证书体系的相关知识比较枯燥、晦涩。俺先拿一个通俗的例子来说事儿。  ◇ 普通的介绍信  想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常用的办法是带公司开的一张介绍信,在信中说:兹有张三先生前往贵公司办理业务,请给予接洽......云云。然后在信上敲上A公司的公章。_rsa和ca的区别

B站C语言——指针_c语言a[4][4]-程序员宅基地

文章浏览阅读467次。学C语言就是学内存int *p = NULL;这里的/*是在定义时使用的,说明p是指针变量,而不是普通变量printf("%d\n",*p);这里的/*的表示取p保存的地址编号对应空间的内容..._c语言a[4][4]

vue2.0引入icon.styl不断报错-程序员宅基地

文章浏览阅读359次。解决方法:在import icon.styl的地方引入icon.css.这样至少不报错,不过估计有问题,后续再看。_icon.styl

Unity-EasyTouch插件之One Finger-程序员宅基地

文章浏览阅读155次。这节课,我们主要讲下单个手指的测试。比如单击啊,双击啊,拖动,单手滑动等。单击:public class TouchTest : MonoBehaviour { // Subscribe to events void OnEnable(){ //启动On_SimpleTap监听,也就是手指单击屏幕,就会触发On_MySimpleTap的方法执行 Ea..._unity easytounch 获取第一跟手指

推荐文章

热门文章

相关标签