XML建模

1.什么叫XML建模
将XML配置文件中的元素、属性、文本信息转换成对象的过程叫做XML建模

2. XML建模
   1)根据XML配置文件元素节点创建元素节点实体类
   ConfigModel、ActionModel、ForwardModel
   2)利用dom4j+xpath技术实现XML建模
   ConfigModelFactory
   DTD约束:由XML的根节点往里建立约束
   XML建模:由最里层节点往根节点进行建模,一个元素节点代表一个实体类

一.xml建模之实体层面的关联关系建立

package com.zking.entity;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
 * ConfigModel实体类对应config.xml中config节点所建立建模实体类
 * <config>-> ConfigModel
 * <action>-> ActionModel
 * <forward>-> ForwardModel
 * 包含关系:ConfigModel -> ActionModel
 * 特点:在config节点包含0~N个节点,而action节点的path属性唯一
 * @author Administrator
 *
 */
public class ConfigModel implements Serializable {
private Map<String,ActionModel>actions =new HashMap<>();

/**
 * 取值
 * @param path action节点所对应的path属性,唯一
 * @return
 */
public ActionModel get(String path) {
	return actions.get(path);
}
/**
 * 存值
 * @param action 根据action中的path属性作为key,以整个action节点作为value值
 */
public void push(ActionModel action) {
	actions.put(action.getPath(),action);
}
}

二.xml建模之综合案例演示

public static ConfigModel createConfigModel(String path) {
	//目标:使用dom4j+path技术完成XML解析建模操作
	ConfigModel configModel =new ConfigModel();
	ActionModel actionModel =null;
	ForwardModel forwardModel =null;
	try {
		//1.获取文件输入流
		InputStream is =ConfigModelFactory.class.getResourceAsStream(path);
		//2.创建SAXReader对象
		SAXReader saxReder =new SAXReader();
		//3.读取文件输入流并转换成Document对象
		Document doc = saxReder.read(is);
		//4.解析XML文件
		//1)获取多个节点:sectNodes
		//2)获取单个节点:selectSingleNode
		//3)xpath语法:/代表定位路径 @代表获取属性
		List<Node>actionNodes =doc.selectNodes("/config/action");
		//循环遍历action接点
			for (Node action : actionNodes) {
			//5.将action节点转换成元素节点
			Element actionElem =(Element) action;
			//6.获取action节点中的属性(path和type)
			String actionPath =actionElem.attributeValue("path");
			String actionType =actionElem.attributeValue("type");
			//7.初始值ActionModel 并完成建模赋值操作
			actionModel =new ActionModel();
			actionModel.setPath(actionPath);
			actionModel.setType(actionType);
			//8.获取action节点下的forward节点(0~N)
			List<Node>forwardNodes =actionElem.selectNodes("forward");
			//9.循环遍历所有的forward节点
			for (Node forward : forwardNodes) {
			//10.将forward节点转换成元素节点	
				Element forwardElem =(Element) forward;
			//11.获取forward节点中所有属性(name,path,以及redirect)
				String forwardName =forwardElem.attributeValue("name");
				String forwardPath =forwardElem.attributeValue("path");
				String forwardRedirect =forwardElem.attributeValue("redirect");
			//12.创建forwardMdel创建对象并完成赋值操作
				forwardModel =new ForwardModel();
				forwardModel.setName(forwardName);
				forwardModel.setPath(forwardPath);
				forwardModel.setRedirect(Boolean.parseBoolean(forwardRedirect));
				//13.action节点包含0~nforward节点,所有请将forward节点的建模对象添加到action中
				actionModel.push(forwardModel);
				//14.config节点中包含0~N个action节点,所有请将action节点的建模对象添加到forward中
				configModel.push(actionModel);
			}
		}
}catch (Exception e) {
	e.printStackTrace();
} 
	return configModel;
}
public static void main(String[] args) {
	ConfigModel configModel = ConfigModelFactory.createConfigModel();
	//包含关系:ConfigModel -> ActionModel -> ForwaedModel
	ActionModel actionModel =configModel.get("/loginAction");
	System.out.println("action节点path属性:"+actionModel.getPath());
	System.out.println("action节点path属性:"+actionModel.getType());
	//要求:从config节点获取action节点的name属性为/loginAction的节点
	ForwardModel forwardModel =actionModel.get("success");
	System.out.println("forward节点name属性:"+forwardModel.getName());
	System.out.println("forward节点name属性:"+forwardModel.getPath());
	System.out.println("forward节点name属性:"+forwardModel.isRedirect());
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值