XML建模

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

2. XML建模
   1)根据XML配置文件元素节点创建元素节点实体类
   ConfigModel、ActionModel、ForwardModel
   2)利用dom4j+xpath技术实现XML建模
   ConfigModelFactory


   DTD约束:由XML的根节点往里建立约束
   XML建模:由最里层节点往根节点进行建模,一个元素节点代表一个实体类
案例代码

package com.zking.utils;

import java.io.InputStream;
import java.util.List;

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

import com.zking.entity.ActionModel;
import com.zking.entity.ConfigModel;
import com.zking.entity.ForwardModel;

public class ConfigModelFactory {
	// 默认的配置文件路径
	public static final String DEFAULT_PATH = "/config.xml";

	private ConfigModelFactory() {

	}

	public static ConfigModel createConfigModel() {
		return createConfigModel(DEFAULT_PATH);
	}

	public static ConfigModel createConfigModel(String path) {
		// 目标,使人domej+xpath技术完成XML解析建模操作

		ConfigModel configModel = new ConfigModel();
		ActionModel actionModel1 = null;
		ForwardModel forwardModel = null;

		try {
			// 1.获取文件输入流
			InputStream is = ConfigModelFactory.class.getResourceAsStream(path);

			// 创建SAXReader对象
			SAXReader saxReader = new SAXReader();
			// 3读取文件输入流转换成Document对象
			Document doc = saxReader.read(is);
			// 4.解析XML文件
			// 1)获取多个节点,selectNodes
			// 2)获取单个节点,selectSingleNode
			// 3)xpath语法,/代表路径@代表获取属性
			List<Node> actionNodes = doc.selectNodes("/config/action");
			// 循环遍历action节点
			for (Node action : actionNodes) {
				// 5.将actioin转换为节点元素节点
				Element actionElem = (Element) action;
				// 6.获取action节点中的属性,path和type
				String actionPath = actionElem.attributeValue("path");
				String actionType = actionElem.attributeValue("type");
				// 7.初始化ActionModel并完成建模赋值操作
				actionModel1 = new ActionModel();
				actionModel1.setPath(actionPath);
				actionModel1.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.创建forwardModel建模对象赋值操作
					forwardModel = new ForwardModel();
					forwardModel.setName(forwardName);
					forwardModel.setPath(forwardpath);
					forwardModel.setRedirect(Boolean.parseBoolean(forwardRedirect));
					// 13.action节点中包含0~N个forward节点,所有将forward节点建模添加对象action中
					actionModel1.push(forwardModel);

				}
				// 14.config节点包含0~N个action节点,所有请将action节点的建模对对象
				configModel.push(actionModel1);

			}
			//

		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return configModel;

	}
       
	public static void main(String[] args) {
		ConfigModel configModel = ConfigModelFactory.createConfigModel();
	//包含关系。ConfigModel  ->ActionModel -> ForwardModel
      //要求从config节点获取action节点的name属性为/loginAction的节点
       ActionModel actionModel =configModel.get("/loginAction");
       System.out.println("action节点path属性:"+actionModel.getPath());
       System.out.println("action节点type属性:"+actionModel.getType());
       //要求:获取action节点中的Forward节点
       ForwardModel forwardModel =actionModel.get("success");
       System.out.println("forward节点name属性:"+forwardModel.getName());
       System.out.println("forward节点path属性:"+forwardModel.getPath());
       System.out.println("forward节点redirect属性:"+forwardModel.isRedirect());

       
       
       
       }
	
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值