最新的JAXP 1.2 EA(Early Access)改弦更张,采用性能更好的Apache Xalan和Apache Xerces分别作为XSLT处理器和XML解析器,不能直接支持Apache Crimson了,所以如果你的开发环境采用了JAXP 1.2 EA或者是Java XML Pack(内含JAXP 1.2 EA),那么将无法直接编译运行上面的例子(AddRecord.java),你需要额外下载并安装Apache Crimson。 方法三:使用TransformerFactory和Transformer类 在JAXP中所提供的标准的更新原始XML文档的方法就是调用XSLT引擎,亦即使用TransformerFactory和Transformer类。请看下面的Java代码片断:
| //首先创建一个DOMSource对象,该构造函数的参数可以是一个Document对象 //doc代表更改后的DOM Tree。 DOMSource doms = new DOMSource (doc); //创建一个File对象,代表DOM Tree所包含的数据的输出介质,这是一个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 Exception\n-----"); tce.printStackTrace(); } catch (TransformerException te) { System.out.println ("Transformer Exception\n---------"); te.printStackTrace (); } |
在实际的应用中,我们可以应用传统的DOM API从XML文档中获取DOM Tree,然后根据实际的需求对DOM Tree执行各种操作,得到最终的Document对象,接下来可以由此Document对象创建DOMSource对象,剩下的事情就是照搬上面的代码了,程序运行完毕后, XMLOutput.xml就是你所需要的结果(当然了,你可以随意更改StreamResult类构造函数的参数,指定不同的输出介质,而不必是千篇一律的XML文档)。
|