java实现xml文件读取并保存到对象
首先浅聊一下解析xml的四种方式:
1.DOM方式:有缺点但是这个缺点却也是他的优点。下面详细介绍:
以树形的层次结构组织节点或信息片断集合,可以获得同一个文档中的多处不同数据。使用起来简单。
优点是:可以获得同一个文档中的多处不同数据,使用起来简单。
缺点是:需要加载整个xml文件,这对内存和资源有一定的消耗,如果是小型的xml文件可以尝试用 DOM方式解析。
经测试当用DOM方式读取大小为10M的文件时, 将会产生内存溢出异常。
2.SAX方式:在读取数据时检查数据,不用解析整个文档,因此不需要将数据存储在内存中。可以避免DOM方式中的内存溢出。
优点:不用考虑在xml文档在加载时的内存消耗过大。
缺点:在用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
3.DOM4J方式:DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的hibernate也用DOM4J来读取XML配置文件。考虑可
DOM4J的可移植性不好。
4.JDOM方式: JDOM自身不包含解析器。它通常使用SAX2解析器来解析和证输入XML文档
下面是用DOM方式实现xml文件的读取并转化为Java类对象:
DOM方式:
xml文件代码 xmlPojo.xml:
<?xml version="1.0" encoding="UTF-8"?>
<items>
<item id="328">
<name>name1</name>
<size>23</size>
</item>
<item id="303">
<name>name2</name>
<size>22</size>
</item>
</items>
xml文件内容对应的java类:
public class XmlPojo{
String id;
String name;
String size;
......
setter AND getter 方法
}
xml读取的实现类:
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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;
public class DomTest {
public static void main(String[] args) {
List<XmlPojo> list = new DomTest().parseXmlPojo();
//打印读取的结果。
for (XmlPojo p : list) {
System.out.println(p);
}
}
//解析xml文件,并把结果封装至XmlPojo的集合中返回
private List<XmlPojo> parseXmlPojo() {
List<XmlPojo> xmlPojoList = null;
try {
//获得dom制造工厂
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
//获得dom解析器
DocumentBuilder builder = factory.newDocumentBuilder();
//获得xml文件的输入流
InputStream inStream = DomTest.class.getClassLoader()
.getResourceAsStream("xmlPojo.xml");
//通过解析器得到Document对象
Document document = builder.parse(inStream);
//得到要获取的所有item 结点,通过每个结点,获取每个item的内容数据。
NodeList list = document.getElementsByTagName("item");
xmlPojoList = new ArrayList<XmlPojo>();
XmlPojo xmlPojo= null;
//遍历person集合,将数据封装于xmlPojo对象中
for (int i = 0, size = list.getLength(); i < size; i++) {
xmlPojo = new XmlPojo();
//得到<person>结点
Element e = (Element) list.item(i);
//获取其id属性
String id = e.getAttribute("id");
xmlPojo.setId(Integer.valueOf(id));
//得到当前<person>结点的所有孩子结点。
NodeList chileList = e.getChildNodes();
//遍历所有孩子结点,以便获得其余数据。
for (int j = 0, csize = chileList.getLength(); j < csize; j++) {
Node node = chileList.item(j);
switch (node.getNodeName()) {
case "name":
//当结点为<name>时,获取内容,并给xmlPojo赋值
String name = node.getTextContent();
xmlPojo.setName(name);
break;
case "size":
//当结点为<age>时,获取内容,并给xmlPojo赋值
String size = node.getTextContent();
xmlPojo.setSize(Integer.valueOf(size));
break;
}
}
//完成一个<xmlPojo>结点的遍历,将xmlPojo对象加入集合中。
xmlPojoList.add(xmlPojo);
//清空xmlPojo对象的数据。
xmlPojo = null;
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//返回最终得到的数据。
return xmlPojoList;
}
}
java实现xml文件读取并保存到对象的更多相关文章
- java操作XML文件--读取内容
先把问题贴出来:编写一个可以解析xml及修改xml内容的工具类 由于我以前做过Android应用程序开发,之前也解析过xml文件,所以,这道题不是很难,这篇文章我先解决第一个问 ...
- Java 操纵XML之读取XML文件
Java 操纵XML之读取XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...
- xml文件读取到数据库
xml文件读取到数据库 第一步,导包 c3p0,dom4j,jaxen,MySQL-connector 第二步 xml文件,config文件 第三步 javabean 第四步 c3p0的工具类 ...
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- # java对xml文件的基本操作
下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- Java学习-019-Properties 文件读取实例源代码
在这几天的学习过程中,有开发的朋友告知我,每个编程语言基本都有相应的配置文件支持类,像 Python 编程语言中支持的 ini 文件及其对应的配置文件读取类 ConfigParse,通过这个类,用户可 ...
- Java解析xml文件遇到特殊符号&会出现异常的解决方案
文/朱季谦 在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息: Error on line 60 of document : 对实体 "xxx" ...
- php xml 文件读取 XMLReader
php xml 文件读取 <?php /** $xmlString = '<xml> <persons count="10"> <person ...
随机推荐
- HihoCoder1642 : 三角形面积和([Offer收割]编程练习赛37)(求面积)(扫描线||暴力)(占位)
描述 如下图所示,在X轴上方一共有N个等腰直角三角形.这些三角形的斜边与X轴重合,斜边的对顶点坐标是(Xi, Yi). (11,5) (4,4) /\ /\(7,3) \ / \/\/ \ / /\/ ...
- 【Lintcode】038.Search a 2D Matrix II
题目: Write an efficient algorithm that searches for a value in an m x n matrix, return the occurrence ...
- python后台架构Django教程——manage.py命令
一.manage.py命令选项 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行.manage.py接受的是Django提供的内置命令. 内 ...
- 高级Java工程师必备 ----- 深入分析 Java IO (一)BIO
BIO编程 最原始BIO 网络编程的基本模型是C/S模型,即两个进程间的通信. 服务端提供IP和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可 ...
- ZigBee简介
前言 目前,中国大力推广的物联网是zigbee 应用的主战场,物联网通过智能感知.识别技术与普适计算(我还特意申请了个域名psjs.vip).泛在网络的融合应用,被称为继计算机.互联网之后世界信息产业 ...
- RedisDesktopManager 可视化工具提示:无法加载键:Scan..
原因是redis的版本过低,window下的redis-cli.exe客户端输入 info 命令可看到该redis的版本,这个scan查看要redis2.80版本以上!!!!
- Teams Formation
题意: 给定一长度为 n 的整数序列 $a$,将其复制m次,并接成一条链,每相邻K个相同的整数会消除,然后其他的整数继续结成一条链,直到不能消除为止,求问最终剩余多少个整数. 解法: 首先将长度为n的 ...
- WPF PasswordBox鼠标进入时程序异常退出的解决办法
最近在开发了一个程序中用到了PasswordBox控件,但是在程序给别人用的时候,鼠标一进入控件时程序就异常退出,查了下windows日志,错误显示如下: 应用程序: WpfPasswordTest2 ...
- day11会话管理
会话管理入门 2.1 生活中会话 我: 小张,你会跳小苹果码? 小张: 会,怎么了? 我: 公司年会上要表演节目,你教教我把 小张:没问题,一顿饭而已. 我: OK. ........ 在这次生活中的 ...
- 2014年第五届蓝桥杯国赛 Log大侠(区间合并+Java递归效率分析)
1678: Log大侠 java 时间限制: 2 Sec 内存限制: 256 MB提交: 20 解决: 1 题目描述 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称L ...