二、生成动态xml
一旦建立了xml格式,我们需要一种能够将其从数据库中动态移植的方法。
生成xml文档相对来说比较简单,因为它只需要一个可以处理字符串的系统。我们建立了一个使用java servlet、enterprise javabean server、jdbc和rdbms(关系型数据库管理系统)的系统。
• servlet通过把生成xml文档的任务交给enterprise javabean (ejb)来处理产品信息请求。 • ejb使用jdbc从数据库里查询所需的产品详细信息。 • ejb生成xml文件并把它传递给servlet。 • servlet调用解析引擎,从xml文件和静态的xsl样式表中创建html输出。 |
(有关xsl应用的其他信息,请参阅用xsl作为模板语言。)
生成xml的例子
在java中创建xml文档字符串的真正代码可以分成几个方法和类。
启动xml生成过程的代码放在ejb方法里。这一实例会立即创建一个stringbuffer,以便存储生成的xml字符串。
stringbuffer xml = new stringbuffer(); xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "browse", request)); xml.append(product.toxml()); xml.append(xmlutils.enddocument("browse"); out.print(xml.tostring()); |
后面的三个xml.append()变元本身就是对其他方法的调用。
产生文件头
第一个附加方法调用xmlutils类来产生xml文件头。我们的java servlet中的代码如下:
public static string begindocument(string stylesheet, string page) { stringbuffer xml = new stringbuffer(); xml.append("<?xml version=\"1.0\"?>\n") .append("<?xml-stylesheet href=http://www.knowsky.com/\"") .append(stylesheet).append("\"") .append(" type =\"text/xsl\"?>\n"); xml.append("<").append(page).append(">\n"); return xml.tostring(); } |
这段代码生成了xml文件头。<?xml>标签把本文件定义为支持1.0版本的xml文件。第二行代码指向用以显示数据的正确样式表的位置。最后包括进去的是项级标签(本实例中为<browse>)。在文件末尾,只有<browse>标签需要被关闭。
<?xml version="1.0"?> <?xml-stylesheet href="http://www.chinaz.com/browse_find/browse.xsl" type="text/xsl"?> <browse> |
填入产品信息
完成了文件头后,控制方法会调用java对象来产生它的xml。本例中调用的是product对象。product对象使用两个方法来产生它的xml表示。第一个方法toxml()通过产生<product>和</product>标签来建立product节点。然后它会调用internalxml(),这样就能提供产品xml所需的内容。internalxml()是一系列的stringbuffer.append()调用。stringbuffer也被转换成字符串并返回给控制方法。
public string toxml() { stringbuffer xml = new stringbuffer("<product>\n"); xml.append(internalxml()); xml.append("</product>\n"); return xml.tostring(); } public string internalxml() |
关闭文件
最后,xmlutils.enddocument()方法被调用。这个调用关闭xml标签(本例中为),并最终完成架构好的xml文件。来自控制方法的整个stringbuffer也转换成字符串,并返回给处理最初http请求的servlet。
.分页: [1] [2] [3] [4]
TAG: XML XSL 动态页面