j2ee07--xml建模

XML建模

什么叫XML建模:将XML配置文件中的元素、属性、文本信息转换成对象的过程叫做XML建模
   1)根据XML配置文件元素节点创建元素节点实体类
   ConfigModel、ActionModel、ForwardModel

public class ConfigModel implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -4636993202614324739L;
	
	private Map<String, ActionModel> actions=new HashMap<String, ActionModel>();
	
	
	public Map<String, ActionModel> getActions() {
		return actions;
	}

	public void setActions(Map<String, ActionModel> actions) {
		this.actions = actions;
	}

	public ConfigModel() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		return "ConfigModel [actions=" + actions + "]";
	}
	
	public void push(ActionModel actionModel) {
		this.actions.put(actionModel.getPath(), actionModel);
	}
	
	public ActionModel getActionModel(String path) {
		return this.actions.get(path);
	}
	
}
public class ActionModel implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 6034757755688346376L;
	
	private String path;
	private String type;
	
	private Map<String, ForwordModel> map=new HashMap<String, ForwordModel>();

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public Map<String, ForwordModel> getMap() {
		return map;
	}

	public void setMap(Map<String, ForwordModel> map) {
		this.map = map;
	}
	
	@Override
	public String toString() {
		return "ActionModel [path=" + path + ", type=" + type + ", map=" + map + "]";
	}

	public ActionModel() {
		// TODO Auto-generated constructor stub
	}

	public void push(ForwordModel forwordModel) {
		this.map.put(forwordModel.getName(), forwordModel);
	}
	
	public ForwordModel getForwordModel(String name) {
		return this.map.get(name);
	}
	
}
public class ForwordModel implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -1454696296591949794L;
	
	private String name;
	private String path;
	private boolean redirect;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	public boolean getRedirect() {
		return redirect;
	}
	public void setRedirect(Boolean redirect) {
		this.redirect = redirect;
	}
	
	public ForwordModel() {
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "ForwordModel [name=" + name + ", path=" + path + ", redirect=" + redirect + "]";
	}
	public ForwordModel(String name, String path, Boolean redirect) {
		this.name = name;
		this.path = path;
		this.redirect = redirect;
	}
}


   2)利用dom4j+xpath技术实现XML建模
   ConfigModelFactory

public class ConfigModelFactory {
	
	public static final String DEFAULT_PATH="/config.xml";
	
	private ConfigModelFactory() {
		
	}
	
	public void test() {
		
	}
	
	public static ConfigModel createConfigModel(String path) {
		//1.获得io流
		InputStream is = ConfigModelFactory.class.getResourceAsStream(path);
		
		//定义需要的变量
		ActionModel actionModel=null;
		String actionpath=null;
		String actiontype=null;
		
		String forwardName=null;
		String forwardPath=null;
		String forwardRedirect=null;
		ForwordModel forwordModel=null;
		
		ConfigModel configModel=new ConfigModel();
		
		//2.创建xml读取工具类
		SAXReader sr=new SAXReader();
		
		try {
			//3.读取配置文件,获取document对象
			Document doc = sr.read(is);
			//4.找到action节点
			List<Node> actionNodes = doc.selectNodes("/config/action");
			
			//5.遍历action节点,获取节点中的path和type属性值
			for (Node actionNode : actionNodes) {
				//将节点对象强转为元素对象
				Element nodeEl=(Element)actionNode;
				
				//获得属性值
				actionpath=nodeEl.attributeValue("path");
				actiontype=nodeEl.attributeValue("type");
				
				//实例化ActionModel对象
				actionModel=new ActionModel();
				
				//将属性值放入 对象
				actionModel.setPath(actionpath);
				actionModel.setType(actiontype);
				
				//找到该action节点下的forward节点
				List<Node> forwardNodes = actionNode.selectNodes("/config/action/forward");
				
				//遍历forward节点
				for (Node forwardNode : forwardNodes) {
					Element forwardEl=(Element)forwardNode;
					//获取forward的属性值
					forwardName= forwardEl.attributeValue("name");
					forwardPath= forwardEl.attributeValue("path");
					forwardRedirect=forwardEl.attributeValue("redirect");
				
					//实例化ForwardModel对象
					forwordModel=new ForwordModel();
					
					//将xml文件中解析出来的值放入对象属性中
					forwordModel.setName(forwardName);
					forwordModel.setPath(forwardPath);
					
					forwordModel.setRedirect(Boolean.parseBoolean(forwardRedirect));
					
					//将forwardModel对象存入到ActionModel的集合中
					actionModel.push(forwordModel);
					
				}
				
				//将actionModel对象存入到ConfigModel的集合中
				configModel.push(actionModel);
			}
			return configModel;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}
	}
	
	public static ConfigModel createConfigModel() {
		return createConfigModel(DEFAULT_PATH);
	}
	
	public static void main(String[] args) {
		ConfigModel configModel = ConfigModelFactory.createConfigModel();
		ActionModel actionModel = configModel.getActionModel("registerAction");
		System.out.println(actionModel.getType());
		
		ForwordModel forwordModel = actionModel.getForwordModel("a");
		System.out.println(forwordModel.getRedirect());
	}
	
	
}

在main方法里面可以输入要查看的对象的唯一id(map键值对里面的键)

然后打印出对象的信息

 

建模的代码实现

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值