不规范的HTML代码普遍存在标签未闭合、属性值无引号、嵌套层级错误、特殊字符未转义等问题,这类代码无法直接被XML解析器识别处理。Tidy工具作为一款成熟的开源标记语言处理工具,能够自动修复HTML的各类语法问题,输出符合XML规范的格式良好的内容,是处理这类场景的高效选择。

Tidy工具的核心能力
Tidy工具最初设计用于修复和整理HTML代码,后续扩展了对XML输出的支持,核心能力包括:
- 自动补全未闭合的标签,修正错误的标签嵌套顺序
- 为属性值添加引号,规范属性书写格式
- 转义XML中的特殊字符,比如把<转为<,&转为&
- 支持自定义输出格式,可指定输出为XML、XHTML等类型
- 能够批量处理文件,也支持通过API集成到代码中调用
Tidy工具的安装方式
命令行版本安装
不同系统的安装方式如下:
- Windows系统:从Tidy官方发布页下载对应版本的可执行文件,放到系统PATH路径下即可使用
- macOS系统:通过Homebrew执行
brew install tidy-html5命令安装 - Linux系统:通过包管理器安装,比如Ubuntu执行
sudo apt-get install tidy命令
编程语言的Tidy库
如果需要集成到代码中,可以选择对应语言的Tidy绑定库:
- Python:安装
pytidylib库,或者直接使用subprocess调用命令行版本 - Java:使用
jtidy库,是Tidy的Java移植版本 - PHP:使用
tidy扩展,PHP官方已经内置了该扩展的支持
命令行方式转换HTML为XML
安装完成后,可以直接通过命令行执行转换操作,基础命令格式如下:
# 将input.html转换为格式良好的XML,输出到output.xml tidy -asxml -output output.xml input.html
常用参数说明:
-asxml:指定输出格式为XML-output:指定输出文件路径,不添加该参数则输出到控制台-quiet:隐藏警告信息,只输出错误信息-indent:开启输出内容的缩进格式化,提升可读性-wrap 0:关闭自动换行,避免长内容被拆分
示例:处理一个存在标签未闭合问题的HTML文件,原文件内容如下:
<html> <head> <title>测试页面</title> <body> <p>这是一段测试内容 <div class=test> <span>内部文本 </body> </html>
执行转换命令后,输出的XML内容会自动补全闭合标签,规范属性格式:
<?xml version="1.0" encoding="utf-8"?>
<html>
<head>
<title>测试页面</title>
</head>
<body>
<p>这是一段测试内容</p>
<div class="test">
<span>内部文本</span>
</div>
</body>
</html>
代码中调用Tidy转换的实现
Python示例
通过subprocess调用命令行版本的Tidy实现转换:
import subprocess
def html_to_xml(input_html_path, output_xml_path):
# 调用tidy命令,-asxml指定输出XML,-output指定输出路径
cmd = [
"tidy",
"-asxml",
"-output", output_xml_path,
input_html_path
]
try:
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == 0:
print("转换成功")
else:
print(f"转换失败,错误信息:{result.stderr}")
except FileNotFoundError:
print("未找到tidy命令,请先安装Tidy工具")
# 调用示例
html_to_xml("input.html", "output.xml")
PHP示例
使用PHP内置的tidy扩展实现转换:
function convertHtmlToXml($htmlContent) {
// 初始化tidy对象
$tidy = new tidy();
// 配置选项:输出XML,编码为UTF-8,缩进格式化
$config = [
"output-xml" => true,
"char-encoding" => "utf8",
"indent" => true
];
// 执行修复和转换
$tidy->parseString($htmlContent, $config);
$tidy->cleanRepair();
// 返回转换后的XML内容
return tidy_get_output($tidy);
}
// 测试代码
$html = '<p>测试内容<div class=test>内部</div>';
$xml = convertHtmlToXml($html);
echo $xml;
转换过程中的注意事项
- 编码问题:如果HTML文件编码不是UTF-8,需要通过
-encoding参数指定正确的编码,避免乱码 - 特殊字符处理:Tidy默认会转义XML特殊字符,如果需要保留部分特殊字符,可以调整
quote-nbsp等配置项 - 自定义标签:如果HTML中包含自定义的标签,需要提前通过配置文件告诉Tidy这些标签的定义,避免被错误处理
- 错误处理:转换过程中如果出现无法自动修复的错误,Tidy会输出错误信息,需要手动检查原HTML的内容
需要注意的是,Tidy工具是基于HTML的语法规则进行修复,对于结构过于混乱、无法识别的HTML内容,可能无法生成完全符合预期的XML,此时需要结合人工校验调整原HTML内容。
HTMLXMLTidyHTML_to_XML修改时间:2026-07-19 08:18:27