1.为什么要将xml封装为实体
1.在Java中使用XML是非常常见的,因为XML是一种通用的标记语言,用于描述数据。在Java中使用XML的最常见场景之一是使用XML作为配置文件格式。Java程序可以读取XML文件中的配置信息并解析它们。然而,XML文件往往非常复杂,包含许多嵌套元素和属性,因此直接使用XML来读取、操作和修改数据很麻烦。
2.为了使XML数据更易读、易操作和可维护,可以使用Java的XML绑定(JAXB)库,将XML数据映射到Java类上。这样,可以轻松地将XML数据读入Java程序中的对象,并按照需要进行操作。Java类中的属性和方法与XML文件中的元素和属性相对应,这使得代码更易于阅读和维护。
3.Java中封装XML实体的一个重要优点是使代码更灵活、可扩展和容错。封装XML实体可以帮助您在实现特定的业务逻辑时更方便地处理XML数据。通过封装XML实体,开发人员可以灵活地处理XML中的数据模型,使程序更易于扩展和维护。此外,封装XML实体还可以实现更好的错误处理和异常处理机制,提高代码的容错性和鲁棒性。
4.总之,在Java程序中封装XML实体可以提高代码的模块化、可读性和可维护性,同时也可以保证数据的准确性和一致性。
2.封装实体类实例
1.以下进行的代码,均已它为原型去进行演示
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE config [<!ELEMENT config (action*)> <!ELEMENT action (forward*)> <!ATTLIST action path CDATA #REQUIRED type CDATA #IMPLIED > ] > <!-- config标签:可以包含0~N个action标签 --> <config> <!-- action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 ,子控制器对应的路径 type:字符串,非空,子控制器的完整类名 --> <action path="/registerAction" type="test.action.RegisterAction"> <forward name="success" path="/index.jsp" redirect="true" /> <forward name="failed" path="/register.jsp" redirect="false" /> </action> <action path="/registerAction2" type="test.action.RegisterAction"> <forward name="success" path="/index.jsp" redirect="true" /> <forward name="failed" path="/register.jsp" redirect="false" /> </action> <action path="/bookAction" type="test.BookAction"> <forward name="add" path="/bookAdd.jsp" redirect="true" /> <forward name="del" path="/reg.jsp" redirect="false" /> <forward name="list" path="/list.jsp" redirect="false" /> <forward name="upd" path="/login.jsp" redirect="false" /> </action> <action path="/loginAction" type="test.action.LoginAction"> <forward name="a" path="/index.jsp" redirect="false" /> <forward name="b" path="/welcome.jsp" redirect="true" /> </action> </config>
1.封装ActionModel
package com.niyin.model; import java.util.HashMap; import java.util.Map; public class ActionModel { private String path; private String gtype; private Map<String ,ForwardModel>fmp=new HashMap<String ,ForwardModel>(); public String getPath() { return path; } public void setPath(String path) { this.path = path; } public String getGtype() { return gtype; } public void setGtype(String gtype) { this.gtype = gtype; } public void push(ForwardModel forwardModel) { fmp.put(forwardModel.getName(), forwardModel); } public ForwardModel pop(String name) { return fmp.get(name); } }
2.封装ConfigModel
package com.niyin.model; import java.util.HashMap; import java.util.Map; public class ConfigModel { private Map<String,ActionModel>aMap=new HashMap<String,ActionModel>(); public void push(ActionModel actionModel) { aMap.put(actionModel.getPath(), actionModel); } public ActionModel pop(String path) { return aMap.get(path); } public static void main(String[] args) throws Exception { ConfigModel configModel =new ConfigMOdelFactory().build(); ActionModel actionModel=configModel.pop("/loginAction"); ForwardModel forwardModel =actionModel.pop("success"); System.out.println(forwardModel.getPath()); } }
3.封装ForwardModel
package com.niyin.model; import java.util.HashMap; import java.util.Map; public class ForwardModel { 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 isRedirect() { return redirect; } public void setRedirect(boolean redirect) { this.redirect = redirect; } }
3.Xml建模之工厂模式
1.前言
1.XML建模是一种流行的建模方式,它将XML文件中的数据映射到Java对象中。相应地,在Java中实现一些工厂模式可以简化XML建模,并提供更好最佳实践的易读性和可维护性。下面介绍一些Java中使用工厂模式实现的XML建模
1.初识工厂模式
工厂方法模式是一种创建对象的模式,将对象的创建委托给工厂类。工厂方法模式提供了一种灵活的方式来创建对象,而不需要显式地指定对象的类。
在XML建模中,您可以使用工厂方法模式将XML元素和Java类映射到一起。您可以定义一个抽象的工厂类,它具有一个创建对象的接口,然后派生出多个实现类,每个实现类用于创建不同的XML元素和Java类的映射。
2.工厂模式实例:
package com.niyin.model; 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; public class ConfigMOdelFactory { public static ConfigModel build() throws Exception { ConfigModel configModel =new ConfigModel(); InputStream in = ConfigMOdelFactory.class.getResourceAsStream("/config.xml"); SAXReader sr =new SAXReader(); Document doc = sr.read(in); // System.out.printl n(doc.asXML()); List<Element> selectNodes = doc.selectNodes("/config/action"); for (Element element : selectNodes) { // System.out.println(element.asXML()); ActionModel actionmodel =new ActionModel(); actionmodel.setPath(element.attributeValue("path")); actionmodel.setGtype(element.attributeValue("type")); List<Element> forwardEles = element.selectNodes("forward"); for (Element forwardEle: forwardEles) { // System.out.println(forwardEle.asXML()); ForwardModel forwardModel = new ForwardModel(); forwardModel.setName(forwardEle.attributeValue("name")); forwardModel.setRedirect(!"false".equals(forwardEle.attributeValue("redirect"))); actionmodel.push(forwardModel);; } configModel.push(actionmodel); } return configModel; } public static void main(String[] args) throws Exception { ConfigMOdelFactory.build(); } }