如何用xml生成动态页面_第1页
如何用xml生成动态页面_第2页
如何用xml生成动态页面_第3页
如何用xml生成动态页面_第4页
如何用xml生成动态页面_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

xml(可扩展标记语言)看起来可能像某种 w3c 标准现在没有什么实际影响,即使 以后能派上用场,也是很久以后的事。但实际上,它现在已经得到了应用。所以,不要等 到 xml 已被加进了你最喜爱的 html 编辑器中才开始使用它。它现在就可以解决各种内部问 题和 b2b 系统问题。 在 ,我们使用 xml 来标准化从 java 对象到 html 数据显示等不同系统之间 的数据表示。 特别需要指出的是,我们发现,只要以非常基本的 xml 结构来实现标准化,就可以更 容易地共享和操作数据。在这一过程中,我们发现了使用 xml 的很多有效方法。下面详细 介绍我们现在的应用情况。 标准化 在使用 xml 之前,建立与你要使用的信息不同的 xml 数据格式。 生成动态 xml 从数据库中生成 html 并不新鲜,但生成 xml 却很新鲜。这里我们介绍具体的生成步骤。 用 xsl 作为模板语言 xsl(可扩展样式表语言)是定义 xml 数据显示格式的好方法,如果写成几个静态模板会更 有效。 生成 html xml 加上 xsl 就等于 html。这听起来似乎不对,但用户所见的我们的 html 页面其实就是 xml 和 xsl 共同产生的效果。 一、标准化 xml 的能力来自于它的灵活性。但不幸的是,它有时太灵活了,以至于你会面对一个 空白的页面,发愁该怎么解决问题。 在任何 xml 的项目中,第一步工作都是创建标准的数据格式。为此你要作出以下决定: 要涉及哪些数据 是否要使用 dtd(文件类型定义) 是否要使用 dom(文档对象模型)或 sax(xml 的简化 api)解析 确定数据: 因为没有标准的 xml 格式,开发者可以自由地开发自己的格式。然而,如果你的格式只能 被一个应用程序识别,那么你只能运行这个程序来使用该格式。如果还有其他程序也能读 懂你的 xml 格式,那显然会更有帮助。如果某个 xml 格式被修改,则使用它的系统可能也 需要被修改,所以你应该建立尽可能完整的格式。因为大多数系统忽略它们无法识别的标 签,所以改变一个 xml 格式的最安全的方法是添加标签,而不是修改标签。 单击此处查看 xml 数据格式实例 在 ,我们查看了不同的产品展示需要的所有产品数据。尽管并不是所有的 页面都使用全部数据,但我们还是由此开发出适用于所有数据的非常完整的 xml 数据格式。 例如,我们的产品明细信息页面显示的数据要比产品浏览页面多。然而,我们在这两种情 况下仍然使用相同的数据格式,因为每个页面的 xsl 模板都只使用它所需要的字段。 是否使用 dtd 在 ,我们使用组织良好的 xml,而不使用仅仅是正确的 xml,因为前者不需要 dtd。dtd 在用户点击和看到页面之间加入了一个处理层。我们发现这一层需要太多的处理。 当然,在以 xml 格式与其他公司通信时,使用 dtd 还是很不错的。因为 dtd 能在发送和接 受时能保证数据结构正确。 选择解析引擎 现在,可以使用的解析引擎有好几个。选择哪一个几乎完全取决于你的应用需要。如果你 决定使用 dtd,那么这个解析引擎必须能使你的 xml 被 dtd 验证。你可以将验证另放到一 个进程中,但那样会影响性能。 sax 和 dom 是两个基本的解析模型。sax 基于事件,所以在 xml 被解析时,事件被发送 给引擎。接下来,事件与输出文件同步。dom 解析引擎为动态 xml 数据和 xsl 样式表建立 层次树状结构。通过随机访问 dom 树,可以提供 xml 数据,就象由 xsl 样式表来决定一样。 sax 模型上的争论主要集中于对 dom 结构的内存降低过度和加快 xsl 样式表解析时间缩短 方面。 然而,我们发现使用 sax 的很多系统并没有充分发挥它的能力。这些系统用它来建立 dom 结构并通过 dom 结构来发送事件。用这种方法,在任何 xml 处理之前必须从样式表中 建立 dom,所以性能会下降。 二、生成动态 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(“n“) .append(“ .append(stylesheet).append(“) .append(“ type =“text/xsl“?n“); xml.append(“n“); return xml.tostring(); 这段代码生成了 xml 文件头。标签把本文件定义为支持 1.0 版本的 xml 文件。第二行 代码指向用以显示数据的正确样式表的位置。最后包括进去的是项级标签(本实例中为)。 在文件末尾,只有标签需要被关闭。 填入产品信息 完成了文件头后,控制方法会调用 java 对象来产生它的 xml。本例中调用的是 product 对 象。product 对象使用两个方法来产生它的 xml 表示。第一个方法 toxml()通过产生 和标签来建立 product 节点。然后它会调用 internalxml(),这样就 能提供产品 xml 所需的内容。internalxml()是一系列的 stringbuffer.append()调用。 stringbuffer 也被转换成字符串并返回给控制方法。 public string toxml() stringbuffer xml = new stringbuffer(“n“); xml.append(internalxml(); xml.append(“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(“tn“); xml.append(“t“).append(pubdesc).append(“n“); xml.append(“t“).append(vendesc).append(“n“; 厖? return xml.tostring(); 关闭文件 最后,xmlutils.enddocument()方法被调用。这个调用关闭 xml 标签(本例中为),并最 终完成架构好的 xml 文件。来自控制方法的整个 stringbuffer 也转换成字符串,并返回给 处理最初 http 请求的 servlet。 三、用 xsl 作为模板语言 为了得到 html 输出,我们把生成的 xml 文件和控制 xml 数据如何表示的 xsl 模板相结 合。我们的 xsl 模板由精心组织的 xsl 和 html 标签组成。 开始建模板 我们的 xsl 模板开始部分与下面这段代码类似。第一行代码为必需代码,将本文件定义为 xsl 样式表。xmlns:xsl=属性引用本文件所使用的 xml 名称空间,而 version=属性则定义 名称空间的版本号。在文件的末尾,我们关闭标签。 由开始的第二行代码确定了 xsl 模板的模式。match 属性是必需的, 在这里指向 xml 标签。在我们的系统里,标签里包含 标签,这使得 xsl 模板可以访问嵌在标签内的产品信息。我们又一次必须在文件 末尾关闭标签。 接下来,我们来看一看组织良好的 html。由于它将被 xml 解析引擎处理,所以必须符 合组织良好的 xml 的所有规则。从本质上来讲,这意味着所有的开始标签必须有对应的结 束标签。例如,通常不被结束的标签,必须用关闭。 shopping bag / adjust quantity ?br 在模板的主体内,有很多 xsl 标签被用于为数据表示提供逻辑。下面解释两个常用的标签。 choose 标签类似于传统编程语言中 if-then-else 结构的开始部分。在 xsl 中, choose 标签表示在代码进入的部分中,赋值将触发动作的发生。拥有赋值属性的 标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论