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工具网。

推荐阅读;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值