什么叫做xml建模?
建模的由来
(一)就是将指定的xml字符串当作对象来操作;
(二)以面向对象的编程思想,描述xml资源文件主要的就是把一个标签当做对象,而他的属性值当做元素。(形成所谓的键值对)
private Map<String, ActionModel> acMap=new HashMap<>();
public void push(ActionModel actionModel) {
acMap.put(actionModel.getPath(), actionModel);
}
public ActionModel pop(String path) {
return acMap.get(path);
}
public static void main(String[] args) {
ConfigModel configModel=new ConfigModel();
ActionModel a=configModel.pop("");
}
xml建模有哪些优点?
(一)只需要调用指定的方法就可以完成预定的字符串获取;
(二)提高代码的复用性。
案例:
(一)思路:
1、分析需要被建模的文件中有那几个对象;
2、每个对象拥有的行为以及属性;
3、定义对象从小到大(从里到外);
4、通过23种的设计模式中的工厂模式,解析xml生产出指定对象。
(二)步骤
建模分两步:
1、以面向对象的编程思想,描述xml资源文件;
2、将xml文件中内容封装进model实体对象。
(二)案例:
创建一个工厂,写好对应的动作和方式,并赋值(填充内容):
public static ConfigModel build() throws Exception {
return build("config.xml");
}
private static ConfigModel build(String xmlpath) throws Exception {
// TODO Auto-generated method stub
ConfigModel configModel=new ConfigModel();
InputStream in = ConfigModelFactory.class.getResourceAsStream(xmlpath);
SAXReader saxReader=new SAXReader();
//标签,进行作用域的扩充
Document doc = saxReader.read(in);
ActionModel actionModel=null;
ForwardModel forwardModel=null;
List<Element> actionEles = doc.selectNodes("/config/action");
for(Element actionEle : actionEles){
actionModel=new ActionModel();
//接下来要往actionModel中填充内容(属性)
actionModel.setPath(actionEle.attributeValue("path"));
actionModel.setType(actionEle.attributeValue("type"));
List<Element> forwordEles = actionEle.selectNodes("forward");
for (Element forwordEle : forwordEles) {
forwardModel=new ForwardModel();
//接下来要往forwardModel中填充内容(属性)
forwardModel.setName(forwordEle.attributeValue("name"));
forwardModel.setPath(forwordEle.attributeValue("path"));
forwardModel.setRedirect(!"false".equals(forwordEle.attributeValue("path")));
actionModel.push(forwardModel);
}
configModel.push(actionModel);
}
return configModel;
}
下一步,进行输出与打印:
public static void main(String[] args) throws Exception {
ConfigModel configModel = ConfigModelFactory.build();
ActionModel actionModel = configModel.pop("/loginAction");//写好所需的路径
System.out.println(actionModel.getType());
ForwardModel forwardModel = actionModel.pop("a");//所需的属性
System.out.println(forwardModel.getPath()+" "+forwardModel.isRedirect());
}