java读取XML文件的四种方法总结(必看篇)
作者:jingxian 发布时间:2023-03-22 23:12:58
标签:java,读取,XML文件
JAVA操作XML文档主要有四种方式,分别是DOM、SAX、JDOM和DOM4J,DOM和SAX是官方提供的,而JDOM和DOM4J则是引用第三方库的,其中用的最多的是DOM4J方式。运行效率和内存使用方面最优的是SAX,但是由于SAX是基于事件的方式,所以SAX无法在编写XML的过程中对已编写内容进行修改,但对于不用进行频繁修改的需求,还是应该选择使用SAX。
下面基于这四种方式来读取XML文件。
第一,以DOM的方式实现。
package xmls;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
/**
* Created by lenovo on 2017-6-3.
*/
public class DOMReadDemo {
public static void main(String[] args){
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try{
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse("src/xmls/DOM.xml");
NodeList booklist = document.getElementsByTagName("book");
for(int i = 0; i < booklist.getLength(); i++){
System.out.println("--------第" + (i+1) + "本书----------");
Element ele = (Element) booklist.item(i);
NodeList childNodes= ele.getChildNodes();
for(int j = 0; j < childNodes.getLength(); j++){
Node n = childNodes.item(j);
if(n.getNodeName() != "#text"){
System.out.println(n.getNodeName() + ":" + n.getTextContent());
}
}
System.out.println("---------------------------------");
}
}catch (ParserConfigurationException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}catch (SAXException e){
e.printStackTrace();
}
}
}
第二,以SAX的方式实现。
package xmls;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
* Created by lenovo on 2017-6-1.
*/
public class xmlTest2 {
public static void main(String[] args){
SAXParserFactory spf = SAXParserFactory.newInstance();
try{
SAXParser sp = spf.newSAXParser();
SAXParserHandler handler = new SAXParserHandler();
sp.parse("src\\xmls\\book.xml", handler);
}catch (Exception e){
e.printStackTrace();
}
}
}
package xmls;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* Created by lenovo on 2017-6-1.
*/
public class SAXParserHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("SAX解析开始");
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("SAX解析结束");
}
@Override
public void startElement(String s, String s1, String s2, Attributes attributes) throws SAXException {
super.startElement(s, s1, s2, attributes);
System.out.println(s2);
for(int i = 0; i < attributes.getLength(); i++){
String name = attributes.getQName(i);
String value = attributes.getValue(name);
System.out.println("属性值:" + name + "=" + value);
}
}
@Override
public void endElement(String s, String s1, String s2) throws SAXException {
super.endElement(s, s1, s2);
if(s2.equals("book")){
System.out.println("-----------------------");
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String value = new String(ch, start, length);
if(value.trim().equals("")){
return;
}
System.out.println(value);
}
}
第三,以JDOM的方式实现。
package xmls;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.JDOMParseException;
import org.jdom2.input.SAXBuilder;
import java.io.*;
import java.util.List;
/**
* Created by lenovo on 2017-6-2.
*/
public class JDOMTest {
public static void main(String[] args){
SAXBuilder saxBuilder = new SAXBuilder();
InputStream in;
try{
in = new FileInputStream(new File("src\\xmls\\book.xml"));
Document document = saxBuilder.build(in);
Element rootElement = document.getRootElement();
List<Element> bookList = rootElement.getChildren();
for(Element book: bookList){
System.out.println("第" + (bookList.indexOf(book)+1) + "本书!");
List<Attribute> attrs = book.getAttributes();
for(Attribute attr: attrs){
System.out.println(attr.getName() + "=" + attr.getValue());
}
for(Element item: book.getChildren()){
System.out.println(item.getName() + ":" + item.getValue());
}
System.out.println("------------------------------------");
}
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (JDOMException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
}
第四,以DOM4J的方式实现。
package xmls;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
/**
* Created by lenovo on 2017-6-2.
*/
public class DOM4JTest {
public void parseXML(){
SAXReader saxReader = new SAXReader();
try{
Document document = saxReader.read(new File("src\\xmls\\book.xml"));
Element rootElement = document.getRootElement();
Iterator it = rootElement.elementIterator();
while (it.hasNext()){
Element book = (Element)it.next();
List<Attribute> attrs = book.attributes();
for(Attribute attr: attrs){
System.out.println("属性名:" + attr.getName() + "---- 属性值:" + attr.getValue() );
}
Iterator cit = book.elementIterator();
while (cit.hasNext()){
Element child = (Element) cit.next();
System.out.println("子节点:" + child.getName());
}
}
}catch (DocumentException e){
e.printStackTrace();
}
}
public static void main(String[] args){
DOM4JTest dom4JTest = new DOM4JTest();
dom4JTest.parseXML();
}
}


猜你喜欢
- Java 多线程方法详解startstart方法 启动线程 在start方法中调用start0方法,而start0是一个
- 前言虽然Android程序是使用Java语言开发的,当然,现在也可以使用kotlin语言。但是实际上我们开发出来的Android程序并不能运
- 在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择。这些功能我们叫它Android Di
- 基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后
- 一、泛型1.1 泛型类的定义// 1. 尖括号 <> 是泛型的标志// 2. E 是类型变量(Type Variable),变量
- 本文介绍了spring boot使用sharding jdbc的配置方式,分享给大家,具体如下:说明要排除DataSourceAutoCon
- 本文实例介绍了基于socket和javaFX简单文件传输工具,分享给大家供大家参考,具体内容如下package application;im
- Springboot使用test无法启动test无法启动,遇到java.lang.IllegalStateException: Unable
- 1,IDEA中Lombok作用数据库: 库 表 字段 对应的值 user表(id,name,age)实体对象pojo: 用来封装数据库中的数
- 实践过程效果代码public partial class Form1 : Form{ public Form1()
- 本文实例为大家分享了使用aop实现全局异常处理的具体代码,供大家参考,具体内容如下日常业务中存在的问题使用大量的try/catch来捕获异常
- 本文实例为大家分享了Java实现24点小游戏的具体代码,供大家参考,具体内容如下程序设计要求:24点游戏是经典的纸牌益智游戏。常见游戏规则:
- 前言本文主要给大家介绍了关于Spring Boot优化内嵌Tomcat的相关内容,分享出来供大家参考学习,下面话不多说了,来一看看详细的介绍
- @Value("${xxx}")取properties时中文乱码(1)检查spring的配置文件中,properties
- 简介 Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的。它
- 本文实例为大家分享了Android实现扫描和生成二维码的具体代码,供大家参考,具体内容如下目标效果:该例子可以扫描二维码和条形码,扫描后会将
- 前言似乎委托对于C#而言是一种高级属性,但是我依旧希望你就算第一次看我的文章,也能有很大的收获。所以本博客的语言描述尽量简单易懂,知识点也是
- 概述还没玩过Spring Boot,现在越来越多的公司在用了,不得不学习了。本篇是Spring Boot的开篇,简单介绍一下如何创建一个Sp
- Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中。然而 XML 配置文件需要通过 D
- 本文实例为大家分享了Java实现聊天室界面的具体代码,供大家参考,具体内容如下服务器端:package Server; impor