作业: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建模作业相关推荐

  1. XML 解析错误:XML 或文本声明不在实体的开头位置,有效的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 昨天在测试APP接口返回XML数据的时候( http://my.oschina.net/woshixiaomayi/blog/ ...

  2. java xml解析器_Java XML解析器

    java xml解析器 Java XML parser is used to work with xml data. XML is widely used technology to transpor ...

  3. xml解析 java_Java的XML解析

    XML:(eXtensible Markup Language) 可扩展标记语言 是一种数据格式,用于存储和传输数据 声明一个xml文件 文档类型定义 book.dtd"> only: ...

  4. c语言解析xml字符串_Python XML解析

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  5. php xml expat,PHP Expat :XML的解析器

    本文中,我将讨论任何用PHP内建的Expat解析器来处理XML文档.通过范例,我将演示Expat的处理方法.同时,范例可以告诉你如何: 建立你自己的处理函数 将XML文档转换成你自己的PHP数据结构 ...

  6. iOS 中的 xml 解析

    在ios 中解析xml 的方法有很多种 1.苹果原生 NSXMLParser:SAX方式解析,使用简单 2.第三方框架 libxml2:纯c语言,默认包含在ios  sdk中,同时支持DOM 和 SA ...

  7. XML解析的四种方式

    1.说明 XML是EXtensible Markup Language, 即可扩展标记语言, 是一种通用的数据交换格式, 它的平台无关性.语言无关性.系统无关性, 给数据集成与交互带来了极大的方便. ...

  8. Android XML解析器– XMLPullParser

    Welcome to android xml parser example using XMLPullParser. We will have a sample XML file that we wi ...

  9. Python XML解析器– ElementTree

    Python XML parser provides us an easy way to read the XML file and extract useful data. Today we wil ...

  10. 常用 XML 解析技术

    现在的软件项目都不是独立的一个项目,都是多系统协调工作.这样的话就涉及到系统间的通讯,通讯就会跟报文传输挂上关系.系统间使用怎样的报文格式进行通讯呢?有的使用固定长度格式报文:有的使用变长格式报文:有 ...

最新文章

  1. thinkphp 视图模型 两个字段映射同一个表
  2. rfc8222045
  3. SSM整合时配置文件的编写
  4. wordpress category.php,wordpress自定义分类目录模板
  5. maven隐式依赖引起的包冲突
  6. 数据科学近3年都应用在哪些领域?
  7. ASP.NET工作笔记014---用VB.NET封装服务器端控件
  8. 万豪国际数据再遭泄露影响520万客户,两名员工账户为突破口
  9. 艾伟:C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
  10. C#调用存储过程,并且获得返回值和OutPut字符串
  11. php 查找同义词,php – 同义词查找器算法
  12. 2018蚂蚁金服Java开发实习生一面面经
  13. 微信小程序navigate标签
  14. kafka auto.offset.reset latest earliest 详解
  15. 小程序从数组中删除指定对象,返回新的长度源代码
  16. 新一代智能视频云发展现状分析:五大要素成关键
  17. php常见面试题总结
  18. Camera--(7)手机双摄像头原理及产业解析
  19. 蓝牙耳机哪款性价比高?2023年高性价比蓝牙耳机盘点
  20. 一步一步在 Windows 10 用 visual studio 2019 编译 zmqpp 4.2.0 版

热门文章

  1. 拓端tecdat|R语言关联规则模型(Apriori算法)挖掘杂货店的交易数据与交互可视化
  2. (22)Python-builtins-sorted()函数用法
  3. pandas.iloc, pandas.loc用法
  4. java培训 lambda表达式_java 8 中lambda表达式学习
  5. Java IO 系统(一)
  6. Java EE实战教程 servlet (一)
  7. 计算机绘图设备cmy,《计算机图形学》练习测试题库
  8. windows环境下安装wget
  9. SSD源码解读之ssd_pascal.py
  10. 推荐系统开源软件汇总和评点