题目是:用java程序将xml中的数据保存到实体对象中,如何实现?
xml如下:
<?xml version="1.0" encoding="UTF-8"?> <root> <user> <userid>a01</userid> <username>arran</username> </user> <user> <userid>a02</userid> <username>jack</username> </user> <user> <userid>a03</userid> <username>eval</username> </user> </root>
以上这是一个上机题,按照要求我们就需要使用首先将xml文档进行解析,然后再提取出其中的数据,然后保存到实体对象中。那么下面来看看代码!
1、首先我们创建一个java工程,然后在项目的根目录下创建一个user.xml,内容就是上面的这一段xml
2、做一个基本的准备
* 创建user实体类
* 创建一个用来测试的类。
* 这里我就简单的创建了两个类来做基本测试。
3、实现代码如下:
package com.lxd.xmldemo.dao; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.lxd.xmldemo.pojo.User; public class UserDao { /** * 获取xml中的user对象 * @return */ public static List<User> getXmlUser(String url){ // 创建一个集合,用来保存xml解析获取到的值,然后做为返回值 List<User> users = new ArrayList<>(); // 创建一个工厂对象 try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder();
// 通过url找到具体的xml然后解析成文档对象 Document document = builder.parse(url);
// 查询出user的节点集合 NodeList userList = document.getElementsByTagName("user"); // 遍历userList for (int i = 0; i < userList.getLength(); i++) { User user = new User(); // 获取第 i 个user节点 Node node = userList.item(i);
// 获取user结点的子节点,包含了Test类型的换行 NodeList cList = node.getChildNodes();
List<String> arr = new ArrayList<>(); for (int j = 1; j < cList.getLength(); j+=2) { Node subNode = cList.item(j); arr.add(subNode.getFirstChild().getTextContent()); } user.setId(arr.get(0)); user.setName(arr.get(1)); users.add(user); } } catch (Exception e) { e.printStackTrace(); } return users; } /** * 主程序 * @param args */ public static void main(String[] args) { List<User> users = getXmlUser("user.xml"); if(null != users) { for (User user : users) { System.out.println(user); } } } }
* 以上就是一个基于DOM来解析xml的整个代码过程,相对来说是比较的简单的。