用XML和XSL来生成动态页面(2)
作者:马晓宁 发布时间:2008-09-04 10:35:00
二、生成动态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()
{
stringbuffer xml = new
stringbuffer("\t")
.append(producttype).append("\n");
xml.append("\t").append(idvalue.trim())
.append("\n");
xml.append("\t").append(idname.trim())
.append("\n");
xml.append("\t").append(page.trim())
.append("\n");
xml.append("\t").append(amount).append("\n");
xml.append("\t").append(vendor).append("\n");
xml.append("\t\n");
xml.append("\t").append(pubdesc).append("\n");
xml.append("\t").append(vendesc).append("\n");
return xml.tostring();
}
关闭文件
最后,xmlutils.enddocument()方法被调用。这个调用关闭xml标签(本例中为),并最终完成架构好的xml文件。来自控制方法的整个stringbuffer也转换成字符串,并返回给处理最初http请求的servlet。


猜你喜欢
- 识别发票录入发票是一件繁琐的工作,如果可以自动识别并且录入系统,那可真是太好了。今天我们就来学习一下,如何自动识别增值税发票并且录入系统~识
- python读取pdf文档一、 准备工作安装对应的库pip install pdfminer3kpip install pdfminer.s
- 一、卷积神经网络Yann LeCun 和Yoshua Bengio在1995年引入了卷积神经网络,也称为卷积网络或CNN。CNN是一种特殊的
- datasets.ImageFolder是PyTorch提供的一个预定义数据集类,用于处理图像数据。它可以方便地将一组图像加载到内存中,并为
- 呵呵,先说明一下下面的程序大部分收集自网络,因为本人在asp编程中经常使用到随机函数,所以收集了一些这类的函数,并做了些注释,方便使用。首发
- 目录前言全局锁表级锁表锁元数据锁(Metadata Locking,简称:MDL锁)总结参考资料前言在真实的企业开发环境中使用MySQL,M
- 废话不多说了,直接上代码吧:#Copyright (c)2017, 东北大学软件学院学生# All rightsreserved#文件名称:
- 在mysql中利用select语句的一个特性就可以很方便地实现查询结果的分页,select语句的语法:SELECT [STRAIGHT_JO
- 今天无意当中看到参数slave_exec_mode,从手册里的说明看出该参数和MySQL复制相关,是可以动态修改的变量,默认是STRICT模
- python是很容易上手的编程语言,但是有些时候使用python编写的程序并不能保证其运行速度(例如:while 和 for),这个时候我们
- 目录机器人api接口调用接口封装机器人实现两个机器人聊天聊天文字转语音总结众所周知,现在网上有很多非常智能bushi(智障)的AI机器人接口
- 二维码是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形。二维码被称为快速响应码,可能看起来很简
- 总说由于pytorch 0.4版本更新实在太大了, 以前版本的代码必须有一定程度的更新. 主要的更新在于 Variable和Tensor的合
- 首先导入包含apriori算法的mlxtend库,pip install mlxtend调用apriori进行关联规则分析,具体代码如下,其
- 在网站中经常会生成表格,CSV和Excel都是常用的报表格式,CSV相对来说比较简单,如果大家有疑问我会相继发布一些CSV的实例,这里主要介
- 前言selenium处理文件上传大致会有两种情况,一种是文件上传使用的是input标签元素,即<input type="fi
- tf.diag(diagonal,name=None) #生成对角矩阵import tensorflowas tf;diagonal=[1,
- 存储函数也是过程式对象之一,与存储过程相似。他们都是由SQL和过程式语句组成的代码片段,并且可以从应用程序和SQL中调用。然而,他们也有一些
- Union 与 Union ALL 的作用都是合并 SELECT 的查询结果集,那么它们有什么不同呢? Union 将查询到的结果集合并后进
- 使用正则表达式的几个步骤:1、用import re 导入正则表达式模块;2、用re.compile()函数创建一个Regex对象;3、用Re