以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 DTD/XML Schema 』 (http://bbs.xml.org.cn/list.asp?boardid=23) ---- 技巧: 将 RTF 文档转换成 HTML 文档 (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=12041) |
-- 作者:anchen0617 -- 发布时间:11/13/2004 3:10:00 PM -- 技巧: 将 RTF 文档转换成 HTML 文档 XML 是将现有的 RTF 格式(Rich Text Format)文档转换成 HTML 以在 Web 上显示的理想媒介。这篇技巧文章说明了如何使用 Java 应用程序 MajiX 将 RTF 文档转换成 XML 格式(虽然有一些限制)。 从中,您可以容易地用XSLT将 XML 文档转换成适合于浏览器的 HTML 格式。代码样本演示了这些技术,可下载的源代码包含了用于转换的 servlet 容器。 我发现使用 XML 是将旧的 RTF 格式(Rich Text Format)文档转换成 HTML 的最快方法。我决定将 MajiX 软件包作为最方便的方法使用。 什么是 MajiX? 准确地讲,MajiX 使用什么样的 XML 标记来表示 RTF 文档呢?MajiX 有两个现成的转换模板:mydoc 和 sdocbook。 mydoc 模板使用 MajiX 专有的 XML 标记来表示 RTF,例如: 清单 1. MajiX 的 mydoc XML 格式
在该示例中,<mydoc>、<info> 和 <author> 等标记都是 MajiX 专有的 XML 标记。 sdocbook 模板使用 Simplified DocBook 标记(请参阅参考资料)。Simplified DocBook 是广受欢迎的 DocBook 元素的子集,DocBook 在全球范围内被用于编写文章和书籍。例如,Linux Documentation Project 使用 DocBook 来编写 Linux 文档。DocBook 是由“结构化信息标准促进组织”(Organization for Advancement of Structured Information Standard (OASIS))维护的。 清单 2 显示了一个缩略的 sdocbook 标记示例。 清单 2. sdocbook XML 格式
比较清单 1 和 清单 2 时注意,mydoc XML 和 sdocbook XML 使用不同的方法来表示同一个文档。 既然 DocBook 是一种受欢迎的标记文档方法,我将演示如何将 RTF 转换成 Simplified DocBook(sdocbook)。 运行 MajiX 批处理方式还是交互方式? 对于这篇技巧文章,我将始终按交互方式运行 MajiX, 因为我将演示如何仅转换一个文档(您的智慧将告诉您如何对您所拥有的其它文档进行转换)。 在 JDK 1.2 或更高版本中,只要输入下列命令就可运行 MajiX:
或者(在一行中输入下列所有内容):
第 1 步:将 RTF 转换成 XML 选择 XML 输出的类型 设置 XSL 样式表
注意:在我测试的 MajiX 实现中似乎有一个错误。如果选择让 MajiX 在 sdocbook 输出中指定样式表,那么它将生成包含标记 xml:stylesheet(而不是 xml-stylesheet)的 DTD 声明。这是不正确的;您必须手工编辑该文件来校正错误。 要将样式表名设置为空: 单击 Edit tags。 设置 DTD 请记住,XML 文档包含标记。XML 定义有关标记如何构建文档的规则,但它不涉及标记应该是什么。 它们可以是从 <html> ... </html> 到 <fat> ... </fat> 的任何标记。 回到清单 1 中的 MajiX 的 mydoc XML 格式,请注意,MajiX 专有的 mydoc XML 文档有 <mydoc> 标记,而 sdocbook XML 格式有 <article>。DTD 用来控制每种格式使用哪种标记。仅当 XML 文档符合 sdocbook DTD 中的定义时,才可把它视作有效的 sdocbook XML 文档。这样就确保任何能够理解 sdocbook DTD 的两个系统都可以成功地相互交换文档。 可以从 sdocbook 的 OASIS 页面下载 sdocbook 的 DTD 定义, 然后将它安装在一个方便的目录中。 要设置 DTD 以指向安装 sdocbook DTD 的位置: 单击 Edit tags。 HTML 是 XML XML 被定义为使用标记来标记文档的任何方法。当然,标记必须遵循某些规则: 每个标记必须带一个封闭标记。<html> ... </html> 这时,MajiX 可能会提示您一些选项。当您有一个奇怪的 RTF 标记(在 sdocbook XML 中,MajiX 没有它的等价标记)时, 会出现这个提示。一般单击缺省值就可以了。 现在,转换 RTF 文档的第一部分已经完成。结果是带 sdocbook 标记的 XML 文档。 第 2 步:将 XML 转换成 HTML XSL 样式表包含这样一些转换规则。基本上(使用上面的示例),输入文件是清单 2, 输出文件将是生成的 HTML 文件。XSL 样式表需要指示 XML 转换引擎做的事情之一是:将 <html> 标记添加到生成文档的开始和末尾。 转换规则还在生成的 HTML 文档中用 <p> ... </p> 将输入文件中 <para> ... </para> 内的文本括起来,等等。简而言之,sdocbook 标记将转换成相应的 HTML 标记。下面显示了根据 sdocbook XML 生成的 HTML: 清单 3. 根据 sdocbook XML 生成的 HTML
此时,您可能觉得很兴奋,并推断您总是可以编写转换规则,将 sdocbook XML 文档转换成其它格式,如 PDF、UNIX 帮助页面等其它类似的格式。您是对的!这正是 XML 文档与 XSL 样式表的功能相结合的美妙之处。 因为 DocBook XML 对于文档编写是如此的流行,所以可以轻易地得到要执行转换的样式表并不稀奇。 从 http://sourceforge.net/project/showfiles.php?group_id=21935 下载它们。文件在 docbook-xsl-<version> 中。这篇技巧文章所用的是 4.1.2。如果您打算遵循本文中的技巧,那么现在就安装样式表。 要将 sdocbook XML 转换成 HTML,输入清单 4 中的命令。请注意,必须完整地输入该命令。 在清单 4 中,我将它分成几行,只是让它适合便携式电脑屏幕。 清单 4. 将 sdocbook XML 转换成 HTML 的命令(将它输入在一行中)
实时将 XML 转换成 HTML 要实时生成 HTML 文档,需要一个 Web 服务器和一个 servlet 容器。光有 Web 服务器只能够提供静态 HTML 页面的服务。servlet 扩展了其能力。它可以处理传递到 Web 服务器的参数并根据传入的参数实时生成一个 HTML 页面。 简而言之,servlet 能够使 Web 服务器完全象 CGI 程序那样提供动态 HTML 页面的服务。 您可以从几乎无止境的 Web 服务器和 servlet 容器组合中进行选择,当然也包括 IBM 的 WebSphere Application Server。Jakarta Tomcat servlet 容器(请参阅参考资料)是用于测试这个技巧的一个开放源码选项:它是与内部 Web 服务器一起提供的 servlet 容器。缺省情况下,它在 8080 上侦听。 “参考资料”中提供了执行从 sdocbook XML 到 HTML 转换的 servlet 代码。我将简要地说明一下清单 5 中最重要的代码部分。 让我们注意一下清单 5 中用数字标记的蓝色行: 设置由 Web 服务器返回给 Web 浏览器的文档类型。在这一情况下是 HTML,因为我打算将 sdocbook XML 转换成 HTML。 结束语
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
32.227ms |