1.什么叫XML建模
将XML配置文件中的元素、属性、文本信息转换成对象的过程叫做XML建模
2. XML建模
1)根据XML配置文件元素节点创建元素节点实体类
ConfigModel、ActionModel、ForwardModel
2)利用dom4j+xpath技术实现XML建模
ConfigModelFactory
思路:
1)xml文件config.xml
2)根据XML中元素节点情况(DTD)来定义ConfigModel、ActionModel、ForwardModel对象模型
A.config节点下有多个子action节点,无节点属性
B.action节点下有多个子fowward节点,有节点属性
C.forward下无子节点,有节点属性
3)使用Map集合存放子节点元素,其中key为子节点唯一属性,value为整个子节点对象
4)利用工厂模式+dom4j+xpath解析Xml配置文件
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config[
<!ELEMENT config (action*)>
<!ELEMENT action (forward*)>
<!ELEMENT forward EMPTY>
<!ATTLIST action
path CDATA #REQUIRED
type CDATA #REQUIRED
>
<!ATTLIST forward
name CDATA #REQUIRED
path CDATA #REQUIRED
redirect (true|false) "false"
>
]>
<!--
config标签:可以包含0~N个action标签
-->
<config>
<!--
action标签:可以饱含0~N个forward标签
path:以/开头的字符串,并且值必须唯一 非空
type:字符串,非空
-->
<action path="/regAction" type="test.RegAction">
<!--
forward标签:没有子标签;
name:字符串,同一action标签下的forward标签name值不能相同 ;
path:以/开头的字符串
redirect:只能是false|true,允许空,默认值为false
-->
<forward name="failed" path="/reg.jsp" redirect="false" />
<forward name="success" path="/login.jsp" redirect="true" />
</action>
<action path="/loginAction" type="test.LoginAction">
<forward name="failed" path="/login.jsp" redirect="false" />
<forward name="success" path="/main.jsp" redirect="true" />
</action>
</config>
将xml文件的config中的全部标签转换成对象
package com.zhouzhuolin.xmlmodel.test;
import java.util.HashMap;
import java.util.Map;
public class ConfigModel {
private Map<String, ActionModel> actions=new HashMap<String, ActionModel>();
public void push(ActionModel actionModel) {
actions.put(actionModel.getPath(), actionModel);
}
public ActionModel get(String path) {
return actions.get(path);
}
public ConfigModel() {
super();
}
}
将xml资源文件中的action标签转换成对象
package com.zhouzhuolin.xmlmodel.test;
import java.util.HashMap;
import java.util.Map;
public class ActionModel {
// <action path="/registerAction" type="test.action.RegisterAction">
private String path;
private String type;
// 同一个Action节点下Forward节点中name的属性是唯一的
// 定义map集合用于存储Forward节点信息 name为键 Forward节点为值
private Map<String, ForwardModel> forward =new HashMap<String, ForwardModel>();
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 void push(ForwardModel forwardModel) {
forward.put(forwardModel.getName(), forwardModel);
}
public ForwardModel get(String name) {
return forward.get(name);
}
public ActionModel() {
super();
}
}
将xml资源文件中的forward标签转换成对象
package com.zhouzhuolin.xmlmodel.test;
public class ForwardModel {
// <forward name="success" path="/index.jsp" redirect="true" />
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;