html为什么说不匹配结束标记,org.xml.sax.SAXParseException:元素类型input必须由匹配的结束标记/input终止...

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

问题

如果你的代码使用了 HTML5 的标准,而Thymeleaf 版本来停留在 2.x ,那么如果没有把闭合,如下:1

2

3

4

5

6

7

First name:

Last name:

就会抛出如下错误1org.xml.sax.SAXParseException: 元素类型 "input" 必须由匹配的结束标记 "" 终止。

解决方案

沿用 Thymeleaf 老版本的情况

方案一(废话)

如果你的 Thymeleaf 不能变更,那么你的 HTML 标准也只能停留在老版本了。你必须严格遵守 XML 定义,在加上结束标记。这显然,对于 HTML5 不友好。

方案二:使用第三方包nekohtml1

2

3

4

5

net.sourceforge.nekohtml

nekohtml

1.9.15

NekoHTML 是一个简单地HTML扫描器和标签补偿器(tag balancer) ,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能投扫描HTML文件并“修正”许多作者(人或机器)在编写HTML文档过程中常犯的错误。NekoHTML 能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的内嵌元素标签。NekoHTML 的开发使用了Xerces Native Interface (XNI),后者是Xerces2的实现基础。

方案三:升级至 Thymeleaf 3 新版本

是时候尝试下使用 Thymeleaf 3 了。Thymeleaf 3 使用了新的解析系统。

Thymeleaf 3 不再是基于XML结构的。由于引入新的解析引擎,模板的内容格式不再需要严格遵守XML规范。即不在要求标签闭合,属性加引号等等。当然,出于易读性考虑,还是推荐你按找XML的标准去编写模板。

Thymeleaf 3 使用一个名为 AttoParser 2的新解析器。 一个新的、基于事件(不符合SAX标准)的解析器,AttoParser由 Thymeleaf 的作者开发,符合 Thymeleaf 的风格。

AttoParser 提供 Thymeleaf 3 两个重要功能:完全支持XML和HTML5(非XML化)标记,从而不再需要外部标记平衡操作。

无损解析,以便在处理的输出的标记类似于具有最高精度的原始模板。

所以下面的格式在 Thymeleaf 3 里面是合法的:1

Thymeleaf 3 其他方面的解析改进启用验证的解析

在 Thymeleaf 2.1提供了两种VALID*模板模式,名为VALIDXHTML和VALIDXML,在而 Thymeleaf 3 中将不再存在。 新的解析基础结构不提供HTML或XML验证,即在解析期间无法验证模板标记是否符合指定的DTD或XML模式定义。

不再需要

Thymeleaf 2.1 要求将

2

3

4

5

6

7

8

var user = ...

if (user.signupYear < 1990) {

alert('You've been here for a long time!');

}

/*]]>*/

而在 Thymeleaf 3 中则不需要这样做,代码立马变得简洁干净:1

2

3

4

5

6

var user = ...

if (user.signupYear < 1990) {

alert('You've been here for a long time!');

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值