是否可以使用HTML Tidy来缩进HTML代码?
示例代码
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li>
<label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q" />
</li>
<li><input class="submit" type="submit" value="Search" /></li>
</ul>
</form>
期望的结果
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li>
<label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q"/>
</li>
<li><input class="submit" type="submit" value="Search"/></li>
</ul>
</form>
如果我使用标准命令tidy -f errs.txt -m index.html
运行它,那么我得到了这个
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 15.3.6), see www.w3.org">
<title></title>
</head>
<body>
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li><label class="screenReader" for=
"q">Keywords</label><input type="text" name="q" value="" id=
"q"></li>
<li><input class="submit" type="submit" value="Search"></li>
</ul>
</form>
</body>
</html>
如何省略所有额外的内容并实际让它缩进代码?
请原谅我,如果这不是它应该支持的功能,我在寻找什么库/工具?
答案 0 :(得分:21)
使用仅包含indent
,tidy-mark
和quiet
选项的配置文件:
indent: auto
indent-spaces: 2
quiet: yes
tidy-mark: no
将其命名为tidy_config.txt
并将其保存为与.html文件相同的目录。像这样运行:
tidy -config tidy_config.txt index.html
要进行更多自定义,请使用tidy man page查找其他相关选项,例如markup: no
或force-output: yes
。
答案 1 :(得分:18)
我没有找到可能性&#34;只有悔改 - 没有任何改变&#34;。下一个配置文件将&#34;修复&#34;尽可能低,(大多数情况下)只重新缩进html。 Tidy
仍在纠正一些错误条件,例如重复(重复)属性。
#based on http://tidy.sourceforge.net/docs/quickref.html
#HTML, XHTML, XML Options Reference
anchor-as-name: no #?
doctype: omit
drop-empty-paras: no
fix-backslash: no
fix-bad-comments: no
fix-uri:no
hide-endtags: yes #?
#input-xml: yes #?
join-styles: no
literal-attributes: yes
lower-literals: no
merge-divs: no
merge-spans: no
output-html: yes
preserve-entities: yes
quote-ampersand: no
quote-nbsp: no
show-body-only: auto
#Diagnostics Options Reference
show-errors: 0
show-warnings: 0
#Pretty Print Options Reference
break-before-br: yes
indent: yes
indent-attributes: no #default
indent-spaces: 4
tab-size: 4
wrap: 132
wrap-asp: no
wrap-jste: no
wrap-php: no
wrap-sections: no
#Character Encoding Options Reference
char-encoding: utf8
#Miscellaneous Options Reference
force-output: yes
quiet: yes
tidy-mark: no
例如下一个html片段
<div>
<div>
<p>
not closed para
<h1>
h1 head
</h1>
<ul>
<li>not closed li
<li>closed li</li>
</ul>
some text
</div>
</div>
将更改为
<div>
<div>
<p>
not closed para
<h1>
h1 head
</h1>
<ul>
<li>not closed li
<li>closed li
</ul>some text
</div>
</div>
您可以注意到,hide-endtags: yes
会隐藏输入中第二个项目符号的结束</li>
。设置hide-endtags: no
- 将获得下一个:
<div>
<div>
<p>
not closed para
</p>
<h1>
h1 head
</h1>
<ul>
<li>not closed li
</li>
<li>closed li
</li>
</ul>some text
</div>
</div>
因此,tidy
会向第一个项目符号关闭</p>
并关闭</li>
。
我没有找到保留输入内容的可能性,只重新加载文件。
答案 2 :(得分:10)
您需要以下选项:
tidy --show-body-only yes -i 4 -w 80 -m file.html
http://tidy.sourceforge.net/docs/quickref.html#show-body-only
-i 4
- 缩进4个空格(整齐从不使用制表符)
-w 80
- 换行第80列(我的系统默认值:68,非常窄)
-m
- 修改文件inplace
(你可能想省略最后一个选项,并先检查输出)
仅显示正文,自然会遗漏tidy-mark
(生成器meta
)。
另一个很酷的选择是:
--quiet yes
- 不会打印W3C广告和其他不必要的输出
(仍然报告错误)
答案 3 :(得分:3)
我参加聚会很晚了:)
但是在整洁的配置文件集中
tidy-mark:否
默认设置为yes。
完成后,整洁不会将元生成器标记添加到您的html。
答案 4 :(得分:3)
要回答海报的原始问题,使用Tidy 缩进 HTML代码,这就是我使用的内容:
tidy --indent auto --quiet yes --show-body-only auto --show-errors 0 --wrap 0 input.html
<强> input.html 强>
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li>
<label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q" />
</li>
<li><input class="submit" type="submit" value="Search" /></li>
</ul>
</form>
<强>输出:强>
<form action="?" method="get" accept-charset="utf-8">
<ul>
<li><label class="screenReader" for="q">Keywords</label><input type="text" name="q" value="" id="q"></li>
<li><input class="submit" type="submit" value="Search"></li>
</ul>
</form>
未添加额外的HTML代码。错误被抑制。要了解每个选项的作用,最好参考official reference。
答案 5 :(得分:0)
如果您只是想简单格式化接收到的html,忽略错误并缩进代码,那么使用tidy
tidy --show-body-only yes -i 4 -w 80 -m -quiet --force-output y -wrap 0 2>/dev/null
您也可以将其与curl
一起使用
curl -s someUrl | tidy --show-body-only yes -i 4 -w 80 -m -quiet --force-output y -wrap 0 2>/dev/null