Xml解析作业与Xml建模andXml建模作业
作业:config.xml解析
1、获取所有action中的type的值
public static void main(String[] args) throws Exception {InputStream in=XmlDemo.class.getResourceAsStream("config.xml"); SAXReader sax= new SAXReader();Document doc=sax.read(in);//获取所有action中的type的值List<Element> stuEles= doc.selectNodes("/config/action");for (Element stuEle : stuEles) {String type=stuEle.attributeValue("type");System.out.println(type);}
2、获取第二个action中的type的值
List<Element> stuEles= doc.selectNodes("/config/action");for (Element stuEle : stuEles) {if("/loginAction".equals(stuEle.attributeValue("path"))) {String type=stuEle.attributeValue("type");System.out.println(type);}}
3、获取第二个action的所有forward的path
List<Element> stuEles= doc.selectNodes("/config/action");for (Element stuEle : stuEles) {if("/loginAction".equals(stuEle.attributeValue("path"))) {List<Element> ford=(List<Element>) stuEle.selectNodes("forward");for (Element element : ford) {String path=element.attributeValue("path");System.out.println(path);} }}
4、获取第二个action的第二个forward的path
List<Element> stuEles= doc.selectNodes("/config/action");for (Element stuEle : stuEles) {if("/loginAction".equals(stuEle.attributeValue("path"))) {List<Element> ford=(List<Element>) stuEle.selectNodes("forward");for (Element element : ford) {if("success".equals(element.attributeValue("name"))) {String path=element.attributeValue("path");System.out.println(path);}}}}
Xml建模
1.什么是Xml建模
将XML配置文件中的元素,属性,文本信息 转换成对象的过程叫XML建模
2.XML建模
1.根据XML配置文件元素节点创建元素,节点,实体类
ConfigModel ActionModel ForwardModel
2.利用dom4j+xpath技术实现XML建模ConfigModelFactory
2. XML建模类
ConfigModel
ActionModel
ForwardModel
ConfigModelFactory
建模的思路
1、分析需要被建模的文件中有那几个对象
2、每个对象拥有的行为以及属性
3、定义对象从小到大(从里到外)
4、通过23种的设计模式中的工厂模式,解析xml生产出指定对象
好处:
提高代码的复用性
4.利用工程模式+dom4j+xpath解析XML配置文件
Config.xml文件
<?xml version="1.0" encoding="UTF-8"?> <config><!-- action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 type:字符串,非空 --><action path="/regAction" type="test.RegAction"><!-- forward标签:没有子标签; name:字符串,同一action标签下的forward标签name值不能相同 ; path:以/开头的字符串 redirect:只能是false|true,允许空,默认值为false --><forward name="failed" path="/reg.jsp" redirect="false" /><forward name="success" path="/login.jsp" redirect="true" /></action><action path="/loginAction" type="test.LoginAction"><forward name="failed" path="/login.jsp" redirect="false" /><forward name="success" path="/main.jsp" redirect="true" /></action> </config>
3.使用Map集合存放子节点元素,其中Key为子节点的唯一属性,Value为整个子节点对象。
定义对象实体类
package com.zking.model;public class FowardModel { /** 添加节点属性*/private String name;private String path;private Boolean reairect;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 getReairect() {return reairect;}public void setReairect(Boolean reairect) {this.reairect = reairect;} }
行为及属性
package com.zking.model;import java.util.HashMap; import java.util.Map;public class ActionModel {private String path;private String type;private Map<String, FowardModel> fmap=new HashMap<>();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;}//存放到Map集合public void push(FowardModel fowardModel) {fmap.put(fowardModel.getName(), fowardModel);}//获取 返回FowardModelpublic FowardModel pop(String name) {return fmap.get(name);} }
package com.zking.model;import java.util.HashMap; import java.util.Map;public class ConfigModel {private Map<String, ActionModel> amap=new HashMap<>();public void push(ActionModel actionModel) {amap.put(actionModel.getPath(), actionModel);}public ActionModel pop(String path) {return amap.get(path);} }
4.利用工程模式+dom4j+xpath解析XML配置文件
导入dom4j包
package com.zking.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;/** * 23设计模式之一:工厂模式 用来将资源文件生产指定的实体类* 处理Java中所遇到的一些特定的一些问题* * 好处:* 提高代码复用性*/ public class ConfigModelFactory {public static ConfigModel build() throws DocumentException {return ConfigModel("config.xml");} /** 生产出有类容的实体类ConfigModel*/private static ConfigModel ConfigModel(String xmlPath) throws DocumentException {// TODO Auto-generated method stub// 创建ConfigModel对象ConfigModel configModel=new ConfigModel();ActionModel actionModel=null;FowardModel fowardModel=null;InputStream in = ConfigModelFactory.class.getResourceAsStream(xmlPath);SAXReader saxRead=new SAXReader();Document doc = saxRead.read(in);List<Element> actionEles = doc.selectNodes("/config/action");for (Element actionEle : actionEles) {actionModel=new ActionModel();//给actionModel对象填充Xml中的action标签的类容actionModel.setPath(actionEle.attributeValue("path"));actionModel.setType(actionEle.attributeValue("type"));List<Element> fowardEles = actionEle.selectNodes("foward");for (Element fowardEle : fowardEles) {fowardModel=new FowardModel();//给fowardModel对象填充Xml中的foward标签的类容fowardModel.setName(fowardEle.attributeValue("name"));fowardModel.setPath(fowardEle.attributeValue("path"));fowardModel.setReairect(!"false".equals(fowardEle.attributeValue("redirect")));//<forward name="failed" path="/login.jsp" redirect="false" /> // redirect默认true 重定向//只有false才是转发//fowardEle.attributeValue("redirect")拿到是xml中你所填的值//不填 重定向 !"false".equals(fowardEle.attributeValue("redirect")) false//填 true 重定向 !"false".equals(fowardEle.attributeValue("redirect")) false//填false 转发 !"false".equals(fowardEle.attributeValue("redirect")) true actionModel.push(fowardModel);}configModel.push(actionModel);}return configModel;}public static void main(String[] args) throws DocumentException {ConfigModel configModel=ConfigModelFactory.build();ActionModel actionModel= configModel.pop("/loginAction");System.out.println(actionModel.getType());}}
控制台输入结果:
Xml建模作业
ServletClassModel
package com.zking.xml.webModel;public class ServletClassModel {private String context;public String getContext() {return context;}public void setContext(String context) {this.context = context;} }
ServletMappingModel
package com.zking.xml.webModel;import java.util.ArrayList; import java.util.List;public class ServletMappingModel {private ServletNameModel servletNameModel;private List<UrlPatternModel> urlPatternModels = new ArrayList<>();public ServletNameModel getServletNameModel() {return servletNameModel;}public void setServletNameModel(ServletNameModel servletNameModel) {this.servletNameModel = servletNameModel;}public void pushUrlPatternModel(UrlPatternModel urlPatternModel) {urlPatternModels.add(urlPatternModel);}public List<UrlPatternModel> getUrlPatternModels() {return urlPatternModels;} }
ServletModel
package com.zking.xml.webModel;public class ServletModel {private ServletNameModel servletNameModel;private ServletClassModel servletClassModel;public ServletNameModel getServletNameModel() {return servletNameModel;}public void setServletNameModel(ServletNameModel servletNameModel) {this.servletNameModel = servletNameModel;}public ServletClassModel getServletClassModel() {return servletClassModel;}public void setServletClassModel(ServletClassModel servletClassModel) {this.servletClassModel = servletClassModel;}}
ServletNameModel
package com.zking.xml.webModel;public class ServletNameModel {private String context;public String getContext() {return context;}public void setContext(String context) {this.context = context;} }
UrlPatternModel
package com.zking.xml.webModel;public class UrlPatternModel {private String context;public String getContext() {return context;}public void setContext(String context) {this.context = context;}}
WebAppModel
package com.zking.xml.webModel;import java.util.ArrayList; import java.util.List;public class WebAppModel {private List<ServletModel> servletModels = new ArrayList<>();private List<ServletMappingModel> servletMappingModels = new ArrayList<>();public void pushServletModel(ServletModel servletModel) {servletModels.add(servletModel);}public List<ServletModel> getServletModels() {return servletModels;}public void pushServletMappingModel(ServletMappingModel servletMappingModel) {servletMappingModels.add(servletMappingModel);}public List<ServletMappingModel> getServletMappingModels() {return servletMappingModels;}}
WebAppModelFactory
package com.zking.xml.webModel;import java.io.InputStream; import java.util.List;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.SAXReader;public class WebAppModelFactory {public static WebAppModel buildWebAppModel() {String xmlPath = "/web.xml";return buildWebAppModel(xmlPath);}public static WebAppModel buildWebAppModel(String xmlPath) {InputStream in = WebAppModelFactory.class.getResourceAsStream(xmlPath);SAXReader saxReader = new SAXReader();WebAppModel webAppModel = new WebAppModel();try {Document doc = saxReader.read(in);List<Element> servletEles = doc.selectNodes("/web-app/servlet");for (Element servletEle : servletEles) {ServletModel servletModel = new ServletModel();Element servletNameEle = (Element) servletEle.selectSingleNode("servlet-name");Element servletClassEle = (Element) servletEle.selectSingleNode("servlet-class");ServletNameModel servletNameModel = new ServletNameModel();ServletClassModel servletClassModel = new ServletClassModel();servletNameModel.setContext(servletNameEle.getText());servletClassModel.setContext(servletClassEle.getText());servletModel.setServletNameModel(servletNameModel);servletModel.setServletClassModel(servletClassModel);webAppModel.pushServletModel(servletModel);}List<Element> servletMappingEles = doc.selectNodes("/web-app/servlet-mapping");for (Element servletMappingEle : servletMappingEles) {ServletMappingModel servletMappingModel = new ServletMappingModel();Element servletNameEle = (Element) servletMappingEle.selectSingleNode("servlet-name");ServletNameModel servletNameModel = new ServletNameModel();servletNameModel.setContext(servletNameEle.getText());servletMappingModel.setServletNameModel(servletNameModel);List<Element> urlPatternEles = servletMappingEle.selectNodes("url-pattern");for (Element urlPatternEle : urlPatternEles) {UrlPatternModel urlPatternModel = new UrlPatternModel();urlPatternModel.setContext(urlPatternEle.getText());servletMappingModel.pushUrlPatternModel(urlPatternModel);}webAppModel.pushServletMappingModel(servletMappingModel);}} catch (Exception e) {// TODO Auto-generated catch block e.printStackTrace();}return webAppModel;}public static String getServletClassByUrl(WebAppModel webAppModel, String url) {String servletClass = "";String servletName = "";List<ServletMappingModel> servletMappingModels = webAppModel.getServletMappingModels();for (ServletMappingModel servletMappingModel : servletMappingModels) {List<UrlPatternModel> urlPatternModels = servletMappingModel.getUrlPatternModels();for (UrlPatternModel urlPatternModel : urlPatternModels) {if(url.equals(urlPatternModel.getContext())) {ServletNameModel servletNameModel = servletMappingModel.getServletNameModel();servletName = servletNameModel.getContext();}}}List<ServletModel> servletModels = webAppModel.getServletModels();for (ServletModel servletModel : servletModels) {ServletNameModel servletNameModel = servletModel.getServletNameModel();if(servletName.equals(servletNameModel.getContext())) {ServletClassModel servletClassModel = servletModel.getServletClassModel();servletClass = servletClassModel.getContext();}}return servletClass;}public static void main(String[] args) {WebAppModel webAppModel = WebAppModelFactory.buildWebAppModel();String res = getServletClassByUrl(webAppModel, "/jrebelServlet");String res2 = getServletClassByUrl(webAppModel, "/jrebelServlet2");String res3 = getServletClassByUrl(webAppModel, "/jrebelServlet3");System.out.println(res);System.out.println(res2);System.out.println(res3);} }
2019-06-1119:22:01
转载于:https://www.cnblogs.com/xcn123/p/11005515.html
Xml解析作业与Xml建模andXml建模作业相关推荐
- XML 解析错误:XML 或文本声明不在实体的开头位置,有效的解决方法
2019独角兽企业重金招聘Python工程师标准>>> 昨天在测试APP接口返回XML数据的时候( http://my.oschina.net/woshixiaomayi/blog/ ...
- java xml解析器_Java XML解析器
java xml解析器 Java XML parser is used to work with xml data. XML is widely used technology to transpor ...
- xml解析 java_Java的XML解析
XML:(eXtensible Markup Language) 可扩展标记语言 是一种数据格式,用于存储和传输数据 声明一个xml文件 文档类型定义 book.dtd"> only: ...
- c语言解析xml字符串_Python XML解析
Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...
- php xml expat,PHP Expat :XML的解析器
本文中,我将讨论任何用PHP内建的Expat解析器来处理XML文档.通过范例,我将演示Expat的处理方法.同时,范例可以告诉你如何: 建立你自己的处理函数 将XML文档转换成你自己的PHP数据结构 ...
- iOS 中的 xml 解析
在ios 中解析xml 的方法有很多种 1.苹果原生 NSXMLParser:SAX方式解析,使用简单 2.第三方框架 libxml2:纯c语言,默认包含在ios sdk中,同时支持DOM 和 SA ...
- XML解析的四种方式
1.说明 XML是EXtensible Markup Language, 即可扩展标记语言, 是一种通用的数据交换格式, 它的平台无关性.语言无关性.系统无关性, 给数据集成与交互带来了极大的方便. ...
- Android XML解析器– XMLPullParser
Welcome to android xml parser example using XMLPullParser. We will have a sample XML file that we wi ...
- Python XML解析器– ElementTree
Python XML parser provides us an easy way to read the XML file and extract useful data. Today we wil ...
- 常用 XML 解析技术
现在的软件项目都不是独立的一个项目,都是多系统协调工作.这样的话就涉及到系统间的通讯,通讯就会跟报文传输挂上关系.系统间使用怎样的报文格式进行通讯呢?有的使用固定长度格式报文:有的使用变长格式报文:有 ...
最新文章
- thinkphp 视图模型 两个字段映射同一个表
- rfc8222045
- SSM整合时配置文件的编写
- wordpress category.php,wordpress自定义分类目录模板
- maven隐式依赖引起的包冲突
- 数据科学近3年都应用在哪些领域?
- ASP.NET工作笔记014---用VB.NET封装服务器端控件
- 万豪国际数据再遭泄露影响520万客户,两名员工账户为突破口
- 艾伟:C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
- C#调用存储过程,并且获得返回值和OutPut字符串
- php 查找同义词,php – 同义词查找器算法
- 2018蚂蚁金服Java开发实习生一面面经
- 微信小程序navigate标签
- kafka auto.offset.reset latest earliest 详解
- 小程序从数组中删除指定对象,返回新的长度源代码
- 新一代智能视频云发展现状分析:五大要素成关键
- php常见面试题总结
- Camera--(7)手机双摄像头原理及产业解析
- 蓝牙耳机哪款性价比高?2023年高性价比蓝牙耳机盘点
- 一步一步在 Windows 10 用 visual studio 2019 编译 zmqpp 4.2.0 版
热门文章
- 拓端tecdat|R语言关联规则模型(Apriori算法)挖掘杂货店的交易数据与交互可视化
- (22)Python-builtins-sorted()函数用法
- pandas.iloc, pandas.loc用法
- java培训 lambda表达式_java 8 中lambda表达式学习
- Java IO 系统(一)
- Java EE实战教程 servlet (一)
- 计算机绘图设备cmy,《计算机图形学》练习测试题库
- windows环境下安装wget
- SSD源码解读之ssd_pascal.py
- 推荐系统开源软件汇总和评点