XML建模
什么叫XML建模:将XML配置文件中的元素、属性、文本信息转换成对象的过程叫做XML建模
1)根据XML配置文件元素节点创建元素节点实体类
ConfigModel、ActionModel、ForwardModelpublic 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建模
ConfigModelFactorypublic 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键值对里面的键)
然后打印出对象的信息
建模的代码实现