自定义xml,然后根据xml生成java类
发布时间:2020-12-15 22:37:46 所属栏目:百科 来源:网络整理
导读:设计的思想其实很简单:1、使用xml定义生成规则;2使用Document解析xml然后生成java类。 一、xml定义规则。 本实例使用dtd来定义xml文件的标签。 config.dtd文件: ?xml version="1.0" encoding="gb2312"?!ELEMENT gen (service+)!ATTLIST gen id ID #REQUIR
设计的思想其实很简单:1、使用xml定义生成规则;2使用Document解析xml然后生成java类。
一、xml定义规则。 本实例使用dtd来定义xml文件的标签。 config.dtd文件: <?xml version="1.0" encoding="gb2312"?> <!ELEMENT gen (service+)> <!ATTLIST gen id ID #REQUIRED> <!ATTLIST gen author CDATA #REQUIRED> <!ELEMENT service (#PCDATA)> <!ATTLIST service dbname CDATA #REQUIRED> <!ATTLIST service prefix CDATA #REQUIRED> config. xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE gen SYSTEM "config.dtd"> <gen id="generator" author="user" > <service dbname="Goods" prefix="GoodsCartRelation" /> <service dbname="Goods" prefix="GoodsFolderRelation" /> </gen> 这样在config.xml中配置了一个gen标签(该标签为xml的根元素,在dtd中定义了),由于dtd文件中定义了gen标签里有ID属性id,故在java中可以使用getElementById来获得该元素,进而获得该元素的其他属性。gen标签的author元素用来生成java类的注释。 service标签中的dbname和prefix都是用来生成类的组成部分。规则隐匿在java类内部。 二、解析xml生成java类。 1.得到xml的Document: public Document getDocument(InputStream inputStream,File file){ InputSource inputSource = new InputSource(inputStream); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { //这两行决定可以根据id得到element factory.setNamespaceAware(true); factory.setValidating(true); DocumentBuilder builder = factory.newDocumentBuilder(); return builder.parse(inputSource); } catch (Exception e) { e.printStackTrace(); System.out.println("it occurs wrong in the getDocument method..."); return null; } }inputStream为config.xml文件流。file为以后扩展使用。 2.解析xml: 主要需要用到的几个方法 InputStream inputStream = new FileInputStream(file); Document doc = getDocument(inputStream,file); Element gen = doc.getElementById("generator"); String author = gen.getAttribute("author"); NodeList serviceList = doc.getElementsByTagName("service"); if(serviceList!=null&&serviceList.getLength()>0){ for(int i=0;i<=serviceList.getLength()-1;i++){ Element service = (Element) serviceList.item(i); String dbname = service.getAttribute("dbname"); String prefix = service.getAttribute("prefix"); ... } System.out.println("generator success..."); }3.生成java文件: 最后一步就是使用IO流,并根据得到的这些元素,根据自定义的规则拼成Java的内容,然后用流写出即可。
其实这是最简单的思路。有很大的优化的可能性。比如使用Schema替代dtd;使用Java文件做模版,先读进来然后使用正则表达式进行相应替换后再写出即可。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- res\values-sw360dp\dimens.xml.orig:518: erro
- 在Visual Basic 6.0中MSFlexGrid控件与DataGrid控件有什么不
- 自定义vue组件发布到npm的方法
- 【零起步开发Cocos2dx-3.x-王牌飞行员(一)】为什么要开发
- hdu 1561 The more, The Better----树形dp+有依赖的背包
- 文件如何进入MSVC 2010中的外部依赖关系?
- ruby-on-rails – 通过rails中的链接获取标题,内容
- 潘金莲改变了历史吗-PostgreSQL舆情事件分析应用
- Flex4中 超出容器边界的子项没有隐藏
- oracle的表分区