JXL制作属于自己的excel导入导出报表工具(三)dom4j和BeanUtils

  准备工作都做好了,接下来要把配置文件中的内容读入对象中,毕竟我们实际操作excel时还是要通过对象的属性来控制输出,xml还是在初始化的时候读取完毕备用.

  说到读xml就不得不提dom4j了.dom4j是一个Java的XML API,用来读写XML文件的.dom4j性能优异、功能强大而且非常简单,很容易上手.

  先来看段实际的代码.

private void ReadXML(String filename)
{
	SAXReader reader=new SAXReader();
	Document document=null;
	try
	{
		URL xmlpath=this.getClass().getClassLoader().getResource(filename);
		document=reader.read(xmlpath);
		Element root=document.getRootElement();
		Element reportElement=null;
		//report
		JMyEntity report=null;
		//设置report数据
		for(Iterator i=root.elementIterator();i.hasNext();)
		{
			reportElement=(Element)i.next();
			if("report".equals(reportElement.getName()))
			{
				report=new Report();
			}
			else if("import".equals(reportElement.getName()))
			{
				report=new Import();
			}
			fillAttribute(reportElement,report);
			fillReportDetail(reportElement,report);
			jmyMap.put(report.getId(), report);
		}
	}
	catch (Exception e) 
	{
		e.printStackTrace();
	}
}

  稍微解释一下,document.getRootElement()是用来获取根结点的方法,在我的程序中获取的就是myreport结点,之后通过root.elementIterator();获取其子元素的迭代器循环,我们可以获得其所有子元素,按照我们的定义,子元素有report和import两种,将它们分别放入不同的对象中.然后调用fillAttribute方法对其属性进行填充,再用fillReportDetail填充其子元素,然后放入我们准备好的hashmap中,用id做为其键,之后我们便可以用id来访问具体的报表设定类,或者导入设定类了.

  下面是fillAttribute的具体实现.

private void fillAttribute(Element parent,Object o)
{
	Iterator i=parent.attributeIterator();
	Attribute a=null;
	try 
	{
		for(;i.hasNext();)
		{
			a=(Attribute)i.next();
			BeanUtils.setProperty(o, a.getName(),a.getValue());
		}
	} 
	catch (Exception e) 
	{
		e.printStackTrace();
	}
}

   在这里我们利用apache的BeanUtils方便的为配置对象赋值,从参数中获取到attributeIterator迭代器,利用属性名来设置配置对象,因此为了这种设定,我们需要保持配置类的属性名和xml配置中的属性名一致,这样我们便省去了大量的set,代码简洁了很多.

  至于fillReportDetail其实也很简单,就是分别为report赋予page、firsthead、dynamic等赋值.用到的方法无非还是BeanUtils以及dom4j的一些方法,那么就简要介绍一下几个用到的方法.

  SAXReader的read(URL url)方法,其实还有一些重载方法不多介绍都是用来读取一个xml文件,需要的参数就是路径,会返回一个Document对象,代表了整个XML.

  Document的getRootElement()方法,得到Root节点返回一个Element对象。熟悉XML的人都知道,一切XML分析都是从Root元素开始的.

  Element的elementIterator()方法,可以获取到当前元素的子元素迭代器,返回Iterator对象,调用其next()方法便可获得子元素Element对象.

  Element的attributeIterator()方法,用获取到当前元素的属性迭代器,返回Iterator对象,调用其next()方法便可获得属性Attribute对象.

  Attribute的getName()方法,返回属性名,getValue()方法返回属性值. 

  其他的方法还有很多,就不多介绍了.

  本次就到这里啦.内容不多,只是入入门,真深入的话,还是有很多可学的东西.下次就要进入正题了,开始探究JXL的奥秘了.  

你可能感兴趣的:(apache,xml,工作,Excel)