《重构HTML:改善Web应用的设计(修订版)》——2.6 TagSoup

简介:

本节书摘来自异步社区《重构HTML:改善Web应用的设计(修订版)》一书中的第2章,第2.6节,作者: 【美】Elliotte Rusty Harold 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.6 TagSoup

John Cowan的TagSoup是一个用Java编写的开源HTML解析器,它实现了XML或SAX的一些简单API。Cowan说它是一个“用Java编写的兼容SAX的解析器,不是解析良构或有效的XML,而是解析世界上大量存在的劣质、污秽和粗野的HTML,虽然很多时候远远处理不了。TagSoup是为那些使用形似合理的软件处理这些问题的人们而设计的。通过提供SAX界面可以把标准的XML工具应用到甚至最坏的HTML上。”

TagSoup并没有计划做成一个供最终用户使用的工具,但还是提供了一些基本的命名行界面。还可以将它跟很多能从SAX中接受输入的XML工具直接挂钩,然后输入HTML,就能得到良构的XHTML,例如:

java -jar tagsoup.jar index.html
<?xml version="1.0" standalone="yes"?>
<html lang="en-US" xmlns="http://www.w3.org/1999/
xhtml"><head><title>Java Virtual Machines</title><meta
name="description" content="A Growing
list of Java virtual machines and their capabilities">
</meta></head><body bgcolor="#ffffff" text="#000000">

<h1 align="center">Java Virtual Machines</h1>
...

你可以稍微改善输出,只需加上--omit-xml-declaration和-nodefaults命令行选项:

$ java -jar tagsoup.jar --omit-xml-declaration
    -nodefaults index.html
<html lang="en-US" xmlns="http://www.w3.org/1999/
xhtml"><head><title>Java Virtual Machines</title><meta
name="description" content="A Growing
list of Java virtual machines and their capabilities"></meta>
</head><body bgcolor="#ffffff" text="#000000">

<h1 align="center">Java Virtual Machines</h1>
...

这会删除一些可能会让某些浏览器困惑的代码。

还可以用--encoding选项指定输入文档的字符编码。比如,如果你知道文档是用Latin-1、ISO8859-1写的,则可以如此运行:

$ java -jar tagsoup.jar --encoding=ISO-8859-1 index.htm
l```  

TagSoup的输出永远是UTF-8。

最后,你可以使用--files选项来复制输入文件为以.xhtml为后缀的新文件。否则,TagSoup直接打印到标准输出中,但可以将输出重新放置到任何合适的地方。TagSoup不能像Tidy那样直接改动文件。

然而,TagSoup主要是作为一个库来用的。跟Tidy比起来,来自命令行模式的输出需要解决一些问题,包括:

- 没有把表现性标记转为CSS;
- 不包含DOCTYPE声明,一些浏览器需要它来认出XHTML;
- 包含了XML声明,这会让一些旧的浏览器困惑;
- 对于空元素(如br和hr),它同时使用起始标签和结束标签⑤,同样会让一些旧的浏览器困惑。

TagSoup不能保证XHTML绝对有效(尽管能保证良构),有些东西它也是处理不了的。最重要的是,XHTML要求所有的img元素都有一个alt属性。如果alt的值是空的,那么这个图片完全是表现性的,屏幕阅读器(screen reader)应当要忽略它。反之,alt有内容的话,屏幕阅读器就会以内容替代图片的显示。TagSoup没有办法知道省略了alt的图片是否为表现性的,所以它不会插入这个属性。类似地,它也不会插入表格的摘要。你需要手工完成这些需求,在使用TagSoup后马上进行验证,以尽快确定问题所在。

虽然有这些限制,但TagSoup确实可以为你做很多低投入高产出的工作。

TagSoup与Tidy
对最终用户来说,TagSoup和Tidy最大的不同之处在于理念上的差异。Tidy对问题有时会放弃以及征求你的帮助,有些不知道该怎么去修复的问题,它也不会尝试去修复。TagSoup则永不放弃,它最终一定会输出良构的XHTML,虽然不总能产生有效的XHTML,但还是能帮你不少忙。基于同样的理由,TagSoup不会提示它处理不了而让你能够手工去修复的问题。它假设你不在乎它的做法。如果你在乎的话,你或许更愿意使用Tidy,Tidy更细心,在不是非常确定文档的意思时,它不会给出方案,而TagSoup一定要给出结果才罢休。
相关文章
|
8天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
20 2
|
13天前
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
32 3
|
3天前
|
机器学习/深度学习 移动开发 自然语言处理
HTML5与神经网络技术的结合有哪些其他应用
HTML5与神经网络技术的结合有哪些其他应用
16 3
|
9天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
15 3
|
9天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
24 2
|
9天前
|
测试技术 持续交付 PHP
PHP在Web开发中的应用与最佳实践###
【10月更文挑战第25天】 本文将深入探讨PHP在现代Web开发中的应用及其优势,并分享一些最佳实践来帮助开发者更有效地使用PHP。无论是初学者还是有经验的开发者,都能从中受益。 ###
26 1
|
10天前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
41 2
|
13天前
|
JavaScript 前端开发 持续交付
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
17 4
|
18天前
|
JavaScript 前端开发 UED
HTML 超链接的多种类型及应用
【10月更文挑战第17天】HTML 超链接类型丰富多样,它们共同构成了网页中不可或缺的导航和交互元素。通过合理地选择和运用这些超链接类型,我们可以为用户创造更加流畅和便捷的浏览体验,提升网站的可用性和吸引力。
19 1
|
19天前
|
前端开发 安全 关系型数据库
PHP在Web开发中的应用及其优势###
【10月更文挑战第16天】 — 本文探讨了PHP在现代Web开发中的广泛应用及其显著优势。通过分析PHP的核心特性,如灵活性、易用性和广泛的应用支持,阐述了为何PHP成为众多开发者和公司的首选技术。文章还介绍了PHP与其他编程语言的比较,并展望了其未来的发展趋势。 ###
34 2