自定义xml,然后根据xml生成java类

本文介绍了一种使用XML定义生成规则并将其解析为Java类的方法,通过配置XML文件来指定类的结构和注释,进而实现自动化生成。解析过程涉及使用DTD文件定义XML规则,以及解析XML文件以提取关键信息并生成相应的Java类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     设计的思想其实很简单: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文件做模版,先读进来然后使用正则表达式进行相应替换后再写出即可。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值