SAXReader是主要用于解析XML文件并提取数据,我以ConfigModelFactory类作为参考,一步一步实现SAXReader解析器的用法:
首先创建ConfigModelFactory类
public class ConfigModelFactory { ...... }
以下都是基于ConfigModelFactory类里进行操作:
首先将.xml文件进行私有化处理,保存默认路径
//默认路径
private static final String DEFAULT_PATH="/config.xml";
创建ConfigModelFactory()私有方法,以及createConfigModel()
private ConfigModelFactory(){ }
public static ConfigModel createConfigModel(){
return createConfigModel(DEFAULT_PATH);
}
创建createConfigModel(String path)方法,注意数据类型是ConfigModel
public static ConfigModel createConfigModel(String path){
......
}
以下都是基于createConfigModel(String path)方法里进行的操作:
就是将config.xml文件中的所有元素的属性和文本解析封装到建模
ConfigModel configModel=new ConfigModel();
抛出异常并进行相关操作,以下重点代码都逐一进行了注释解析,全在里面了供大家参考学习
try {
ActionModel actionModel=null;
ForwardModel forwardModel=null;
//思路:
//1、读取config.xml并转换成文件输入流
InputStream is = ConfigModelFactory.class.getResourceAsStream(path);
//2、创建SAXReader对象
SAXReader reader = new SAXReader();
//3、读取文件输入流并转换成Documnet对象
Document doc = reader.read(is);
//4、循环遍历元素节点
List<Node> actionNodes = doc.selectNodes("/config/action");
for (Node actionNode : actionNodes) {
//将actionNode转换成元素节点
Element actionElem=(Element) actionNode;
//提取action节点的path与type属性
String actionPath = actionElem.attributeValue("path");
String actionType = actionElem.attributeValue("type");
//实例化
actionModel=new ActionModel();
actionModel.setPath(actionPath);
actionModel.setType(actionType);
//获取action所有的forward节点
List<Node> forwardNodes = actionElem.selectNodes("forward");
//循环遍历forward节点
for (Node forwardNode : forwardNodes) {
//将forward节点转换成Elemnet元素节点
Element forwardElem= (Element) forwardNode;
String forwardName = forwardElem.attributeValue("name");
String forwardPath = forwardElem.attributeValue("path");
String forwardRedirect = forwardElem.attributeValue("redirect");
//实例化ForwardModel并完成属性赋值
forwardModel=new ForwardModel();
forwardModel.setName(forwardName);
forwardModel.setPath(forwardPath);
forwardModel.setRedirect(Boolean.parseBoolean(forwardRedirect));
//将forward Model建模实体类存储到ActionModel
actionModel.push(forwardModel);
}
//将action Model建模实体类存储到ConfigModel中
configModel.push(actionModel);
}
} catch (Exception e) {
e.printStackTrace();
}
return configModel;
}
接下来我使用main方法更直观的显示数据
public static void main(String[] args) {
ConfigModel configModel = ConfigModelFactory.createConfigModel("/config.xml");
//获取path='/loginAction'的action节点
ActionModel actionModel = configModel.get("/AddAction");
System.out.println(actionModel.getPath());
System.out.println(actionModel.getType());
ForwardModel forwardModel = actionModel.get("man");
System.out.println(forwardModel.getName());
System.out.println(forwardModel.getPath());
System.out.println(forwardModel.isRedirect());
}
输出结果:
如有不懂的宝子们,欢迎大家在评论区积极留言和讨论