java 保存xml_java实现xml文件读取并保存到对象

该博客详细介绍了XML解析的四种常见方式:DOM、SAX、DOM4J和JDOM。DOM方式允许方便地访问文档数据但内存消耗大,适合小文件;SAX方式避免内存问题但编码复杂;DOM4J性能优秀但可移植性不佳;JDOM不包含解析器,通常与SAX结合使用。文中还展示了使用DOM方式解析XML文件并转换为Java对象的实例代码。
摘要由CSDN通过智能技术生成

首先浅聊一下解析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:

name1

23

name2

22

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 list = new DomTest().parseXmlPojo();

//打印读取的结果。

for (XmlPojo p : list) {

System.out.println(p);

}

}

//解析xml文件,并把结果封装至XmlPojo的集合中返回

private List parseXmlPojo() {

List 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= null;

//遍历person集合,将数据封装于xmlPojo对象中

for (int i = 0, size = list.getLength(); i < size; i++) {

xmlPojo = new XmlPojo();

//得到结点

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

//获取其id属性

String id = e.getAttribute("id");

xmlPojo.setId(Integer.valueOf(id));

//得到当前结点的所有孩子结点。

NodeList chileList = e.getChildNodes();

//遍历所有孩子结点,以便获得其余数据。

for (int j = 0, csize = chileList.getLength(); j < csize; j++) {

Node node = chileList.item(j);

switch (node.getNodeName()) {

case "name":

//当结点为时,获取内容,并给xmlPojo赋值

String name = node.getTextContent();

xmlPojo.setName(name);

break;

case "size":

//当结点为时,获取内容,并给xmlPojo赋值

String size = node.getTextContent();

xmlPojo.setSize(Integer.valueOf(size));

break;

}

}

//完成一个结点的遍历,将xmlPojo对象加入集合中。

xmlPojoList.add(xmlPojo);

//清空xmlPojo对象的数据。

xmlPojo = null;

}

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

//返回最终得到的数据。

return xmlPojoList;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值