一 XML建模是什么?
1.1 概念:
描述及定义数据和信息的结构、类型、属性及关系,一般涉及三个方面:文档类型定义(DTD)、XML Schema和命名空间。总的来说就是将一些标签及标签中的属性给封装起来,来进行调用获取内容
二,进行封装实体
前言:一定要了解需要建模的XML配置文件的结构,属性及关系,这样会更加提高我们的代码效率,如下图的xml结构我们本需要建模3个class(类)因为要加上一个创建模式(下面的知识点会讲)所以需要建立4个class(类)
注意:一定要注意集合的嵌套关系
分别划为config,action,forward三个标签所以我们需要定三个class,从小(forward)到大创建(config)
forward class代码案例:
定义的都是一些标签中的属性,以键值对的形式,每个forward中都有着不同属性的name值,所以我们可以根据name获取整条的数据
action class代码案例:
创建的也是一些action中的一些属性,要定义两个方法压栈,方便在创建模式class中进行压栈及name 因为要根据name值获取整条数据
注意:要创建一个map集合根据键值对去获取指定内容每个标签中都有着不同的属性
action class代码案例:
发现在config建模类中push压栈的是action建模类 根据不同属性path值获取不同的action标签,图中下面的build方法,是根据在工厂模式类中让所有的建模获取xml不同标签下和属性压栈到工厂模式中,在工厂模式类型返回到根目录config建模中,这样就能在根目录config建模中获取到指定内容。
总之:在建模模式要注意在之间的嵌套关系
三,工厂模式
3.1什么是工厂模式
工厂模式是一种创建对象的设计模式,它可以将对象的创建过程与使用过程分离,使得对象的创建更加灵活和可扩展。想一想,在我们建立完成xml各标签的class类无法获取xml中的数据(就好比一个空壳),这下就要利用工厂模式各标签的class类去xml文件中获得数据。
工厂模式代码:
package com.LiuBing_text; import java.io.InputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 工厂模式(Factory)---创建型模式 * * @author 兵 * */ public class ConfigModelFactory { // build 建造 public static ConFigModel build() throws Exception { // selectNodes 获取某一个节点 // selectSingNode 获取单个节点 // getText 获取某一个标签的内容 // attributeValue//获取属性的值 // 此时的模式装载xml配置文件 InputStream in = ConfigModelFactory.class.getResourceAsStream("config.xml"); // 创建所需要model ConFigModel conFigModel = new ConFigModel(); // 创建一个解析器 SAXReader sr = new SAXReader(); // 解析xml文件内容 Document doc = sr.read(in); List<Element> actionElements = doc.selectNodes("/config/action"); for (Element actionElement : actionElements) { // 遍历获取action下的所有内容 // System.out.println(actionElement.asXML()); // 实列action建模 ActionModel actionmodel = new ActionModel(); // actionmodel建模获取xml配置文件action标签中的path及type actionmodel.setPath(actionElement.attributeValue("path")); actionmodel.setType(actionElement.attributeValue("type")); //再继续遍历获取forward List<Element> forwards = actionElement.selectNodes("forward"); for (Element forward : forwards) { //实例化forwardModel建模 ForwardModel forwardmodel= new ForwardModel(); //forwardModel建模获取xmlforward值 forwardmodel.setName(forward.attributeValue("name")); forwardmodel.setPath(forward.attributeValue("path")); forwardmodel.setRedirect(!"false".equals(forward.attributeValue("redirect"))); //将forward放进actionmodel actionmodel.push(forwardmodel); } //再将actionmodel放进跟标签建模中 conFigModel.push(actionmodel); } return conFigModel; } public static void main(String[] args) throws Exception { ConfigModelFactory.build(); } }
在如代码中,main方法只能在class实现一个,需要将代码写在一个方法中,在调用输出的时候写一个main方法调用build方法即可输出运行结果。但build方法返回值需要返回到ConFigModel类中,这样在ConFigModel类中也就能调用获取指定内容