xml建模

XML建模
ConfigModel
ActionModel
ForwardModel
ConfigModelFactory

三种命名法
UserName 帕斯卡
userName 驼峰
user-name 匈牙利

RuntimeException

XxxFactory

java代码调试

XML建模
1.根据xml文件建立对应的实体类模型(子节点采用map保存)
2.编写对应工厂类进行xml解析
2.1.从根节点的子节点进行解析
3.一定要有返回值
案例代码展示
前言:将xml转换成java类
.根据xml文件,建立模型,根据xml文件标签 创建实体类

1 第一步 根据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    
      path CDATA  #REQUIRED
      redirect (false|true)  #REQUIRED
      name  CDATA #REQUIRED
      >
]>


<!--
        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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2.创建对应的实体类(根据xml标签 ,属性 ,元素 ,建立模型)代码块

private String path;
    private String type;
    private Map<String, ForwardModel> forwardModels=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;
    }
    
    
    //一个actioc标签中可以有多个forward标签
    public void push(ForwardModel forwardModel) {
        this.forwardModels.put(forwardModel.getName(), forwardModel);
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
3.工厂类

public class ConfigModelFactory {

    private static final String DEFAULT_PATH="/config.xml";
    
    private ConfigModelFactory() {
        
    }
    
    public static ConfigModel createConfig() {
        
        return createConfig(DEFAULT_PATH);
        
    }
    
    public static ConfigModel  createConfig(String xmlpath) {
        ConfigModel configModel=new ConfigModel();
        //根据路径读取xml
        InputStream is=ConfigModelFactory.class.getResourceAsStream(xmlpath);
        SAXReader read=new SAXReader();
        try {
            Document doc = read.read(is);
            ActionModel actionModel=new ActionModel();
            //读取action节点
            List<Element> actionNodes = doc.selectNodes("/config/action");
            for (Element  actionNode : actionNodes) {
            //读取action的属性
                String actionPath = actionNode.attributeValue("path");
                String actionType = actionNode.attributeValue("type");
        
                actionModel.setPath(actionPath);
                actionModel.setType(actionType);
                //读取action节点
                List<Element> forwardNodes = actionNode.selectNodes("forward");
            for (Element forwardNode : forwardNodes) {
            
                ForwardModel forwardModel=new ForwardModel();
                //读取forward节点的属性
                String forwardName = forwardNode.attributeValue("name");
                String forwardPath = forwardNode.attributeValue("path");
                String forwardRedirect = forwardNode.attributeValue("redirect");
                forwardModel.setName(forwardName);
                forwardModel.setPath(forwardPath);
                forwardModel.setRedirect(Boolean.parseBoolean(forwardRedirect));
                actionModel.push(forwardModel);
                
            }
                configModel.push(actionModel);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
        
        
        return configModel;
    }
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
4.调用

public static void main(String[] args) {
    
    ConfigModel config = ConfigModelFactory.createConfig();
    System.out.println(config.get("/regAction"));
    
    
————————————————
版权声明:本文为CSDN博主「码农翻身当老板」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46588016/article/details/106970900

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值