SQLMapper
SQLMapper类用一个DataBaseHandler类来完成它的数据库工作,并用一个映射方法将文档对象转换成需要的输出类型。映射方法返回一个字符串,因为原来就假定输出由字符数据构成。另外,也可以使用一个StringBuffer。
SQLMapper需要一个SQL查询字符串、一个输出类型集以及一个用于执行具体工作的DataBaseHandler。它们用set方法来初始化,并用get方法来检索:
if ((getSQL() != null)
&& (getSQL().length() > 0)
&& (getOutputType() != null)
&& (isValidOutputType(getOutputType()))
&& (getDataBaseHandler() != null)){
Document document = dataBaseHandler.getDocument(getSQL());
为了转换成需要的输出,需要在set方法中指定一个XSL样式表。我们创建了一个Transformer对象,它只提供一个私有 getTransformer方法。该方法可获取一个默认样式表或者指定的样式表。如有必要,可使用Java的TransformerFactory方法来生成一个样式表:
TransformerFactorytransformerfactory = TransformerFactory.newInstance();
transformer = transformerfactory.newTransformer(getStylesheet());
同样只需要几行Java代码就可完成转换:
Transformer transformer = getTransformer();
StringWritersw = new StringWriter();
StreamResult result = new StreamResult(sw);
if (transformer != null) {
transformer.transform(new DOMSource(document.getDocumentElement()), result);
output = sw.toString();
System.err.println("output: " + output);
}else{
System.err.println("No Transformer");
}
Transformer对象需要一个DOMSource对象。为了获得这个对象,我们向Transformer的构造函数传递一个DOM文档的根元素。
最后要由实现者设计自己的XSL样式表。也可选用一些默认样式表,以便将原始数据转换成HTML或者XML。下面是一个泛化的XSL样式表,它能使用所谓的“标识转换”(identity transformation)技术,将生成的数据转换成一个XML文档,并确保输出内容相容于UTF-8标准,并具有良好的可读性。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
