技术标签: 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();
}
}
}
运行结果如下图:
二、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);
}
}
}
运行结果如下图:
三、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======");
}
}
}
运行结果如下图:
四、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());
}
}
}
}
运行结果如下图:
接下来再看一下这四种方式都有哪些优点。
1.DOM方式,形成了树结构,直观容易理解,方便编写代码;解析过程中将树结构保留在内存中,便于修改;
2.SAX方式,采用事件驱动模式,减小内存的耗费,当只需要处理xml中的数据时使用比较方便;
3.JDOM方式,只使用具体类而不用接口,API大量使用了collections类;
4.DOM4J方式,JDOM的一种智能分支,它合并了许多超出基本xml文档表示的功能,使用接口和抽象基本类方法,是一个非常优秀的java xml
API,它的性能优异,灵活性好,功能强大,非常便于使用,也是一个开放源代码的软件。
以上就是关于在java中解析xml的主要方式以及这些方式都有哪些优点的主要内容。如果你对java知识感兴趣,想要了解更多java基础以及java经典例子,敬请关注奇Q工具网。
推荐阅读;
文章浏览阅读3.8k次。Java面试题系列——JavaSE面试题(集合二)_javase 面试题
文章浏览阅读796次,点赞21次,收藏21次。本系统有管理员、学生用户。管理员:后台首页、个人资料(个人信息、修改密码)、轮播图、公告信息管理、系统用户(管理员、学生用户)、交流管理(论坛列表、论坛分类列表)模块管理(目标信息、目标记录、学习科普、学习类别)。学生用户;首页、我的(个人信息、我的账户、我的收藏)、交流论坛、公告信息、目标信息、学习科普等功能模块。
文章浏览阅读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
文章浏览阅读5.3k次。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2243题目大意:问长度为1~N的串中包含了模式串的串总共有几个。题目思路:求出长度不大于l的包含模式串的字符串数,方法是改求不包含模式串的字符串总数,当然先要处理出总的字符串个数,可以用矩阵也可以用二分幂和的方法。而求不包含模式串的字符串数同样是构造矩阵,同时还要建立一个虚结点,储存长度小于l的_hdu 2243
文章浏览阅读1.6k次。步骤0, 本教程必须先添加脚本注意: 本教程需要使用脚本, 脚本可在这个帖子中下载: http://club.szlcsc.com/article/details_1940_1.html //(就不再本帖中贴出附件,脚本可能会有更新,到时多处修改很麻烦)添加脚本的方式:注意: 脚本的存放路径必须 和 PADS自带的脚本 放在相同路径下.添加完成后:简述步骤: 设置左下角为原点; 工具-..._ad出贴片清单
文章浏览阅读685次。service通过什么方式实现的?正常情况下,service是一个抽象的概念,它是通过调用iptables工具实现的pod之间的通信,而iptables是系统内核netfiter模块的一个工具,主要是用来管理一张端口转发表,每一次的转发都需要轮询一遍转发表,因此,当集群数量较大的时候,相应的转发性能会下降。所以在kubernets1.11版本以后,将IPVS引入GA,通过IPVS实现SVC。实现service功能,通过kube-proxy,是kubernets核心组件,能否替代?常见概念_kubernetes service ipvs
文章浏览阅读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.恢复原始对象实例实验一 二维图形绘制金刚石一笔绘三种方法..._绘图程序计算机图形学
文章浏览阅读751次。★ 先说一个通俗的例子 考虑到证书体系的相关知识比较枯燥、晦涩。俺先拿一个通俗的例子来说事儿。 ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常用的办法是带公司开的一张介绍信,在信中说:兹有张三先生前往贵公司办理业务,请给予接洽......云云。然后在信上敲上A公司的公章。_rsa和ca的区别
文章浏览阅读467次。学C语言就是学内存int *p = NULL;这里的/*是在定义时使用的,说明p是指针变量,而不是普通变量printf("%d\n",*p);这里的/*的表示取p保存的地址编号对应空间的内容..._c语言a[4][4]
文章浏览阅读359次。解决方法:在import icon.styl的地方引入icon.css.这样至少不报错,不过估计有问题,后续再看。_icon.styl
文章浏览阅读155次。这节课,我们主要讲下单个手指的测试。比如单击啊,双击啊,拖动,单手滑动等。单击:public class TouchTest : MonoBehaviour { // Subscribe to events void OnEnable(){ //启动On_SimpleTap监听,也就是手指单击屏幕,就会触发On_MySimpleTap的方法执行 Ea..._unity easytounch 获取第一跟手指