用 HTML Tidy 将 HTML 转换成 XML

来源:互联网 发布:凯里欧文生涯数据 编辑:程序博客网 时间:2024/06/05 04:38
HTML.4.01 的版本之一,已经符合 XML 的语法。词汇表没有变化(XHTML 使用的也是您所熟悉的标记,如 <p>、 <b> 、和 <a> ),但是语法却是 XML 的,因此可以很好地融入 XML 的处理流程之中。

HTML 和 XHTML 之间的主要区别在于:

  1. XML 元素必须有开始和结束标记,而 HTML 对于很多元素都不要求有结束标记,如 <p> 是空元素的时候就不要求使用结束标记。
  2. 空元素遵循 XML 的规范。比如说,换行符写为 <br /> ,而不是 <br>
  3. 属性值一定要用引号引起来(比如说,要写成 <a href="http://www.marchal.com"> ,而不能写成 <a href=http://www.marchal.com> )。

清单 2 是 HTML Tidy 对清单 1 所示的输入数据处理得到的文件。从中您可以看到,这是一个合法的 XML 文档,而且,为了生成它所做的工作是很少的。


清单 2. index.xml (节选)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="generator" content="HTML Tidy for Mac OS X (vers 1st June 2003), see www.w3.org" /><title>Journey to Windsor</title></head><body><table><tr><td width="15"></td><td><font size="3" face="Helvetica">Journey to Windsor<br />Benoît Marchal<br />July 2003<br /><br /><a href="mailto:bmarchal@pineapplesoft.com">bmarchal@pineapplesoft.com</a></font></td></tr></table><center><table border="3"><tr><td><a href="pages/dscn0824.html"><img src="thumbnails/dscn0824.jpg" border="0" alt="dscn0824" /></a><br /><font size="3" face="Helvetica">dscn0824.jpg<br />A bright, red mailbox inside the castle. It seems oddly familiar inan historic setting.<br />Windsor Castle<br />© 2003, Benoît Marchal</font></td></tr></table></center></body></html>

要是您觉得 XHTML 的词汇看起来不舒服,那该怎么办呢?请您接着往下读。


更进一步处理

XHTML 文档是有效的 XML 文档,因此您可以将它们加入到 XML 的处理流程中。更确切地说,您可以用常规的 XML 工具(如 XSL、解析器,等等)再对这些文件进行处理。

事实上我并不是非常喜欢这个例子中用到的 XHTML 词汇表。因为 XHTML 是用于发布的词汇表,因此结构性很差,我希望通过清单 3 中所示的那种 XML 词汇表来维护我的照片库(这个词汇表最早是在我的技巧文章Divide and conquer large XML documents中介绍的)。为了阐明 XML 处理过程,我编写了一个简单的 XSL 样式表(见 清单 4),它可以从 XHTML 文档中获取标题、文件名、日期以及描述信息。这个样式表生成了一个更加结构化的文档,使得我们处理起来更加方便。


清单 3. index-transform.xml (节选)
<?xml version="1.0" encoding="MacRoman"?><gl:gallery xmlns:gl="http://ananas.org/2003/tips/gallery"><gl:title>Journey to Windsor</gl:title><gl:photo><gl:title>Windsor Castle</gl:title><gl:date>July 2003</gl:date><gl:image>dscn0824.jpg</gl:image><gl:description>A bright, red mailbox inside the castle.  It seems oddly familiar in an historic setting.</gl:description></gl:photo></gl:gallery>


清单 4. cleanup.xsl
<?xml version="1.0"?><xsl:stylesheet version="1.0"                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"                xmlns:gl="http://ananas.org/2003/tips/gallery"                xmlns:html="http://www.w3.org/1999/xhtml"                exclude-result-prefixes="html"><xsl:output method="xml" indent="yes" encoding="MacRoman"/><xsl:template match="html:html">  <xsl:variable name="date"                select="html:body/html:table/html:tr/html:td[2]                        /html:font/html:br[3]                        /preceding-sibling::text()[1]"/>  <gl:gallery>    <gl:title>      <xsl:value-of select="html:head/html:title"/>    </gl:title>    <xsl:for-each select="html:body/html:center/html:table                          /html:tr/html:td">      <xsl:variable name="title"                    select="html:font/html:br[3]                            /preceding-sibling::text()[1]"/>      <xsl:variable name="image"                    select="html:font/html:br[1]                            /preceding-sibling::text()[1]"/>      <xsl:variable name="description"                    select="html:font/html:br[2]                            /preceding-sibling::text()[1]"/>      <gl:photo>        <gl:title><xsl:value-of          select="normalize-space($title)"/></gl:title>        <gl:date><xsl:value-of          select="normalize-space($date)"/></gl:date>        <gl:image><xsl:value-of          select="normalize-space($image)"/></gl:image>        <gl:description><xsl:value-of          select="normalize-space($description)"/></gl:description>      </gl:photo>    </xsl:for-each>  </gl:gallery></xsl:template></xsl:stylesheet>


结束语

HTML Tidy 属于那种很灵巧的小工具,每一个网管的工具箱里都应该有一个。因为它可以输出 XHTML,因此对于那些使用 XML/XSL 的网管是格外有用的。至于其他的词汇表,则只是另一种样式表而已。


参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 下载本文的 源代码,其中包括作者提供的照片库。



  • 从 SourceForge 下载 HTML Tidy。它可以在 Windows、Linux、MacOS 以及其他一些平台上运行。同一个网站上还有它的图形化界面以及开发库,这有助于您将其嵌入处理流程中。您还可以下载到 Java 语言版的JTidy。



  • 请访问 Dave Raggett's Web site,这里是 HTML Tidy 最初的家,上面有大量的信息。



  • 请阅读 Benoit Marchal 的 利用 XML 进行 Web 发布的基础知识 (developerWorks,2003 年 7 月),文中循序渐进地讲述了用 XML 和 XSL 进行 Web 发布的方法。



  • 本文作者在 对大型 XML 文档分而治之一文介绍了如何用样式表发布在线图库(developerWorks,2003 年 6 月)



  • W3C 的 HTML 主页上有关于 XHTML 的更多信息。



  • 有关 XHTML 更深入的探讨,请阅读 Nicolas Chase 撰写的文章 Web 的未来:XHTML 2.0( developerWorks,2002 年 9 月)。



  • 请到 developerWorks XML 专区上查找更多的 XML 资料。要获得到目前为止的所有的 XML 技巧文章,请访问技巧专栏总结。


  • IBM 的 DB2 数据库不仅支持关系数据库存储,也提供与 XML 有关的工具,比如可作为 XML 与关系系统之间桥梁的 DB2 XML Extender。要学习有关 DB2 的更多知识,请访问 DB2 开发者园地。



  • 请了解如何成为一名 IBM 认证的 XML 及相关技术的开发人员。