题目是:用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的整个代码过程,相对来说是比较的简单的。

面试题之xml解析?的更多相关文章

  1. PHP面试题及答案解析(8)—PHP综合应用题

    1.写出下列服务的用途和默认端口. ftp.ssh.http.telnet.https ftp:File Transfer Protocol,文件传输协议,是应用层的协议,它基于传输层,为用户服务,它 ...

  2. PHP面试题及答案解析(6)—PHP网络编程

    1.禁用COOKIE后SEESION还能用吗? 可以,COOKIE和SESSION都是用来实现会话机制的,由于http协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的状态,需要有这么一个 ...

  3. PHP面试题及答案解析(4)—PHP核心技术

    1.写出一个能创建多级目录的PHP函数. <?php /** * 创建多级目录 * @param $path string 要创建的目录 * @param $mode int 创建目录的模式,在 ...

  4. PHP面试题及答案解析(1)—PHP语法基础

    1. strlen( )与 mb_strlen( )的作用分别是什么? strlen和mb_strlen都是用于获取字符串长度.strlen只针对单字节编码字符,也就是说它计算的是字符串的总字节数.如 ...

  5. java170道面试题汇总+详细解析

    2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对 ...

  6. xml解析技术

    本文总结Dom,sax解析,  使用Java作为工具解析xml文档. 1 Dom 综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的 ...

  7. Duilib源码分析(三)XML解析器—CMarkup

    上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...

  8. JSON解析和XML解析对比

    JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...

  9. 【Android】实现XML解析的几种技术

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

随机推荐

  1. Linux中制作静态库

    静态库生成: 1.第一步:生成.o文件 2.第二步:将所有.o文件打包 ar src  libMyTest.a  *.o 生成出libMyTest.a 3.使用: 第一种:gcc  main.c    ...

  2. redis 基础 Redis 数据类型

    String(字符串) Hash(哈希) List(列表) Set(集合) zset(sorted set:有序集合)

  3. Python - 编程技巧,语法糖,黑魔法,pythonic

    参考,搬运 http://python-web-guide.readthedocs.io/zh/latest/idiom/idiom.html 待定 1. Python支持链式比较 # bad a = ...

  4. 珠心算测验(0)<P2014_1>

    珠心算测验 (count.cpp/c/pas) 问题描述]  珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得 ...

  5. spark实验(二)--scala安装(1)

    一.实验目的 (1)掌握在 Linux 虚拟机中安装 Hadoop 和 Spark 的方法: (2)熟悉 HDFS 的基本使用方法: (3)掌握使用 Spark 访问本地文件和 HDFS 文件的方法. ...

  6. 树莓派安装nextcloud、Seafile

    参考博文:http://bbs.eeworld.com.cn/thread-505579-1-1.html http://blog.sina.com.cn/s/blog_6f55d8210102xia ...

  7. Codeforces Round #588 (Div. 2)C(思维,暴力)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int a[27],b[27];int vis ...

  8. C++11常用特性介绍——nullptr关键字及用法

    一.nullptr关键字及用法 1)NULL的二义性 void func(int) {} void func(int*) {} 当函数调用func(NULL)时会执行哪个函数呢? 先看C++对NULL ...

  9. 随机游走模型(Random Walk)

    给定了一个时间顺序向量\(z_1,...,z_T\),rw模型是由次序r来定义的,\(z_t\)仅取决于前\(t-r\)个元素.当r = 1时为最简单的RW模型. 给定了向量的其他元素,\(z_t\) ...

  10. Vue源码(下篇)

    上一篇是mount之前的添加一些方法,包括全局方法gloal-api,XXXMixin,initXXX,然后一切准备就绪,来到了mount阶段,这个阶段主要是 解析template 创建watcher ...