XML建模,解析代码

  1. XML建模
    ConfigModel
    ActionModel
    ForwardModel
    ConfigModelFactory

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

  3. RuntimeException

  4. XxxFactory

  5. 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>

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);
	}

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;
	}
	

4.调用

public static void main(String[] args) {
	
	ConfigModel config = ConfigModelFactory.createConfig();
	System.out.println(config.get("/regAction"));
	
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值