据的输出介质,这是个XML文件。
File f = new File (XMLOutput.xml);
//创建一个StreamResult对象,该构造函数的参数能取为File对象。
StreamResult sr = new StreamResult (f);
//下面调用JAXP中的XSLT引擎来实现输出DOM Tree中的数据到XML文件中的功能。
//XSLT引擎的输入为DOMSource对象,输出为StreamResut对象。
try
{
//首先创建一个TransformerFactory对象,再由此创建Transformer对象。Transformer
//类相当于一个XSLT引擎。通常我们使用他来处理XSL文件,不过在这里我们使
//用他来输出XML文件。
TransformerFactory tf=TransformerFactory.newInstance();
Transformer t=tf.newTransformer ();
//关键的一步, 调用Transformer对象 (XSLT引擎)的transform()方法,该方法的第一
//个参数是DOMSource对象,第二个参数是StreamResult对象。
t.transform(doms,sr);
}
catch (TransformerConfigurationException tce)
{
System.out.println(Transformer Configuration Exceptionn-----);
tce.printStackTrace();
}
catch (TransformerException te)
{
System.out.print
ln (Transformer Exceptionn---------);
te.printStackTrace ();
}
在实际的应用中,我们能应用传统的DOM API从XML文件中获取DOM Tree,然后根据实际的需求对DOM Tree执行各种操作,得到最终的Document对象,接下来能由此Document对象创建DOMSource对象,剩下的事情就是照搬上面的代码了,程式运行完毕后, XMLOutput.xml就是你所需要的结果(当然了,你能随意更改StreamResult类构造函数的参数,指定不同的输出介质,而不必是千篇一律的XML文件)。
这个方法最大的好处在于能随心所欲的控制DOM Tree中的内容输出到输出介质中的格式,不过光靠TransformerFactory类和Transformer类并不能实现这个功能,还需要依赖OutputKeys类的帮助。 完整的例子请参考下列文件: AddRecord2.java(见附件)、user.xml(见附件)。该例子的运行环境为:视窗系统 XP Professional、JDK 1.3.1。为了能够正常编译运行AddRecord2.java这个程式,你需要到网址java.sun去下载安装JAXP 1.1或Java XML Pack(Java XML Pack已内含JAXP了)。
OutputKeys类
javax.xml.transform.OutputKeys类和java.util.Properties类配合使用,能控制JAXP的XSLT引擎(Transformer类)输出XML文件的格式。请看下面的代码片断:
//首先创建一个TransformerFactory对象,再由此创建Transformer对象。
TransformerFactory tf=TransformerFactory.newInstance();
Transformer t=tf.newTransformer ();
//获取Transformser对象的输出属性,亦即XSLT引擎的缺省输出属性,这是个
//java.util.Properties对象。
Properties properties = t.getOutputProperties();
//设置新的输出属性:输出字符编码为GB2312,这样能支持中文字符,XSLT引擎所输出
//的XML文件如果包含了中文字符,能正常显示,不会出现所谓的汉字问题。
//请留意OutputKeys类的字符串常数OutputKeys.ENCODING。
properties.setProperty(OutputKeys.ENCODING,GB2312);
/更新XSLT引擎的输出属性。
t.setOutputProperties(properties);
//调用XSLT引擎,按照输出属性中的设置,输出DOM Tree中的内容到输出介质中。
t.transform(DOMSource_Object,StreamResult_Object);
从上面的程式代码,我们不难看出,通过设置XSLT引擎(Transformer类)的输出属性,能控制DOM Tree中的