用 HTML Tidy 将 HTML 转换成 XML

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 in
an 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 及相关技术的开发人员
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值