WEB开发网
开发学院软件开发Java JAXP 全部内容,第 2 部分:使用 Sun 的 XML 处理... 阅读

JAXP 全部内容,第 2 部分:使用 Sun 的 XML 处理工具包来转换 XML

 2010-04-06 00:00:00 来源:WEB开发网   
核心提示: 调用该方法之后,转换的结果写出到所提供的 Result 中,JAXP 全部内容,第 2 部分:使用 Sun 的 XML 处理工具包来转换 XML(9),在 清单 5 中,这是一个文件,Templates 接口是线程安全的(解决了第二个限制),并代表已编译的样式表(解决第一个限制),但还可以将输出

调用该方法之后,转换的结果写出到所提供的 Result 中。在 清单 5 中,这是一个文件,但还可以将输出发送到 SAX ContentHandler 或 DOM Node 中。如果想要全部尝试,绑定的文件提供了简单的 XML 文件、XSL 样式表和源代码。

高速缓存 XSL 样式表

这一切都很简单,但这样使用 JAXP 有两个明显的限制:

每次执行 transform(),Transformer 对象都要处理 XSL 样式表。

Transformer 的实例不是线程安全的。在多个线程之间不能使用相同的实例。

这两个限制源自同一问题:Transformer 每次执行转换时,都必须重新处理 XSL。如果该处理出现在多个线程中,就可能发生严重问题。在线程问题之上,必须一再地付出处理 XSL 样式表的成本。毫无疑问,您非常希望知道如何解决这些问题,那就继续读下去。

加载模板

尚未讨论过的接口 javax.xml.transform.Templates 与 javax.xml.transform.Transformer 相近。Templates 接口是线程安全的(解决了第二个限制),并代表已编译的样式表(解决第一个限制)。在讨论相关概念之前,请查看清单 6:

清单 6. 使用 JAXP Templates 接口

try { 
 // Set up input documents 
 Source inputXML = new StreamSource( 
  new File("phonebook.xml")); 
 Source inputXSL = new StreamSource( 
  new File("phonebook.xsl")); 
 // Set up output sink 
 Result outputXHTML = new StreamResult( 
  new File("output-templates.html")); 
 // Setup a factory for transforms 
 TransformerFactory factory = TransformerFactory.newInstance(); 
 // Pre-compile instructions 
 Templates templates = factory.newTemplates(inputXSL); 
 // Get a transformer for this XSL 
 Transformer transformer = templates.newTransformer(); 
 // Perform the transformation 
 transformer.transform(inputXML, outputXHTML); 
} catch (TransformerConfigurationException e) { 
 System.out.println("The underlying XSL processor " + 
  "does not support the requested features."); 
} catch (TransformerException e) { 
 System.out.println("Error occurred obtaining " + 
  "XSL processor."); 
} 

上一页  4 5 6 7 8 9 10  下一页

Tags:JAXP 全部

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接