读取xml并转换为Java对象

XML 被设计用来传输和存储数据。 java

主要用途:

1.XML 把数据从 HTML 分离


若是你须要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。
经过 XML,数据可以存储在独立的 XML 文件中。这样你就能够专一于使用 HTML 进行布局和显示,并确保修改底层数据再也不须要对 HTML 进行任何的改变。
经过使用几行 JavaScript,你就能够读取一个外部 XML 文件,而后更新 HTML 中的数据内容 web


2.XML 简化数据共享 浏览器


在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。
XML 数据以纯文本格式进行存储,所以提供了一种独立于软件和硬件的数据存储方法。
这让建立不一样应用程序能够共享的数据变得更加容易。 app


3.XML 简化数据传输
经过 XML,能够在不兼容的系统之间轻松地交换数据。
对开发人员来讲,其中一项最费时的挑战一直是在因特网上的不兼容系统之间交换数据。
因为能够经过各类不兼容的应用程序来读取数据,以 XML 交换数据下降了这种复杂性。 dom


4.XML 简化平台的变动
升级到新的系统(硬件或软件平台),老是很是费时的。必须转换大量的数据,不兼容的数据常常会丢失。
XML 数据以文本格式存储。这使得 XML 在不损失数据的状况下,更容易扩展或升级到新的操做系统、新应用程序或新的浏览器。 webapp


5.XML 使您的数据更有用
因为 XML 独立于硬件、软件以及应用程序,XML 使您的数据更可用,也更有用。
不一样的应用程序都可以访问您的数据,不单单在 HTML 页中,也能够从 XML 数据源中进行访问。
经过 XML,您的数据可供各类阅读设备使用(手持的计算机、语音设备、新闻阅读器等),还能够供盲人或其余残障人士使用。 maven

代码:

users.xml 布局

<?xml version="1.0" encoding="UTF-8"?>
<root>
	<region city="chongqing">
		<user loginName="xiaohong" password="321321" address="NO.1"/>
		<user loginName="xiaoming" password="321321" address="NO.2"/>
		<user loginName="daming" password="321321" address="NO.3"/>
	</region>
	<region city="dalian">
		<user loginName="haige" password="321321" address="NO.4"/>
		<user loginName="rg" password="321321" address="NO.4"/>
		<user loginName="hg" password="321321" address="NO.5"/>
		<user loginName="ff" password="321321" address="NO.6"/>
		<user loginName="ll" password="321321" address="NO.7"/>
	</region>
</root>

ReadXmlToJava.java 性能


package test.fortest;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import test.model.User;

public class ReadXmlToJava {
	public static void main(String args[]) {
		Map<String, User> usersMap = new HashMap<String, User>();
		SAXReader reader = new SAXReader();
		String appFilePath = "D:"+File.separator + "ForLearn" + File.separator + 
				"Example" + File.separator + "mavenEx" + File.separator  + "exampleF" + File.separator +
				"src"+ File.separator  + "main" + File.separator  + "webapp" + File.separator +
				"WEB-INF" + File.separator + "users.xml";
		try {
			//读取xml文档。
			Document document = reader.read(new File(appFilePath));
			//读取根节点元素。
			Element rootElement = document.getRootElement();
			//读取根元素的下面的全部子元素。
			Iterator cityElements = rootElement.elementIterator();
			while(cityElements.hasNext()) {
				Element cityElement = (Element) cityElements.next();
				String city = cityElement.attributeValue("city");
				Iterator userElements = cityElement.elementIterator();
				while(userElements.hasNext()) {
					Element userElement = (Element) userElements.next();
					User user = new User();
					user.setLoginName(userElement.attributeValue("loginName"));
					user.setPassword(userElement.attributeValue("password"));
					user.setAddress(userElement.attributeValue("address"));
					usersMap.put(userElement.attributeValue("loginName"), user);
				}
			}
			System.out.println(appFilePath);
			System.out.println("usersMap size : " + usersMap.size());
			User user = usersMap.get("xiaohong");
			System.out.println("loginName : " + user.getLoginName() + " " 
					+ "password : " + user.getPassword() + " "
					+ "address : " + user.getAddress());
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}

}

user.java this

package test.model;

import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "users", schema = "public")
public class User extends AbsEntity implements IEntity{
	
	private String loginName;
	
	private String password;
	
	private String address;
	
	@ManyToOne
	private Role role;

	public String getLoginName() {
		return loginName;
	}

	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}

	@Deprecated
	public String getDisplayString() {
		return "this is a user";
	}
}

输出:

D:\ForLearn\Example\mavenEx\exampleF\src\main\webapp\WEB-INF\users.xml usersMap size : 8 loginName : xiaohong password : 321321 address : NO.1




    这里用到SAXReader来读取users.xml。users.xml里面存放的是用户的一些信息,每个〈user〉元素的属性对应着实体Java类的user.java的一个属性。 


    SAXReader是dom4j中的一个类,SAXReader主要用于解析XML文件,是当前比较流行的xml解决方案.

    dom4j是一个很是很是优秀的Java XML API,用来读写XML文件的,具备性能优异、功能强大和极端易用使用的特色,同时它也是一个开放源代码的软件

相关文章
相关标签/搜索