用于非破坏性地折叠或重新缩进HTML的实用程序


2

我有一个脚本,它接受来自wget或类似的输入,并使用它搜索关键词grep。(我保证我不会尝试使用正则表达式解析HTML,它只是一种模拟我们在另一个更复杂的产品中的内容检测行为的便捷方式。)这很有效,只要HTML内容不是太严重了。如果是这样,线条会变得非常长(在某些情况下我已经看到超过50 kB),并且grep它们会窒息。

为了解决这个问题,我希望能够折叠或重新缩进HTML,使其分布在更多行上。但是,为了使脚本能够提供准确的结果,我需要能够在不改变内容的情况下执行此操作。这意味着它无法纠正无效或未封闭的标签,并且它必须仅在元素之间折叠,而不是在元素内部折叠。

这两个要求似乎排除了我发现的所有HTML整理或美化实用程序。

是否有任何基于UNIX的shell实用程序,perl / python / ruby​​模块或类似的东西可以为我做这个?

或者,因为我需要的是在标签之间添加一些新行,有没有办法让我可以半自动地做到这一点?


你怎么不折叠html元素内仍然有这个工作?
Ignacio Vazquez-Abrams 2013年

问题是,可靠地检测“元素之间”或甚至标识元素的唯一方法是要求您解析它。如果你有一个你正在使用的特定文档,可以使用正则表达式找到解决方案,但是没有通用的用例。
Darth Android

Ignacio:我的意思是说它不能折叠“文本节点”。
2013年

Answers:


1

好的,对于其他需要这个的人,我正在记录在这个很棒的线程中提出的建议(如果链接断开,根据StackExchange指南):

  • HTB 2.0 - 基于DOS - http://www.digital-mines.com/htb/

  • Tabifier - 支持CSS,HTML和C样式语法(包括Javascript) - http://tools.arantius.com/tabifier

  • HTML-Kit - 在Windows上运行的全功能免费HTML编辑器,您需要配置TIDY选项[工具/使用Tidy /添加新配置检查代码],取消选中除“仅输出正文内容”和“转换非”之外的所有交换打破实体的空间“,然后转到Actions / Tools / HTML Tidy / Indent Tags或美化 - http://www.chami.com/html-kit/

  • SCREEM - 仅适用于Linux -

  • NetBeans - “在使用NetBeans打开html文件后,单击Source然后选择Format。就是这样。” -

  • WebmasterGate的HTML / XHTML Beautifier - 在线工具 - http://www.webmastergate.com/html-beautifier/

  • Aptana Studio(版本2.0.4) - “选择编辑>格式化或按Ctrl-Shift F格式化html代码。格式化功能可以从Windows> Preferrences配置,然后选择Aptana>编辑器> HTML>格式化,单击编辑到添加不应该换新行的标签,然后将其保存为新的偏好。“ -

  • UniversalIndentGUI - 在内部使用HTB Beautifier - 在运行Notepad ++时,转到插件>插件管理器>显示插件管理器,从可用列表中选择UniversalIndentGUI进行安装。

  • 整理这些选项:

(填充文本,因为当代码直接跟随子弹时,降价引擎似乎有问题)

[HTML, XHTML, XML Options]
anchor-as-name:no
doctype:omit
drop-empty-paras:no
fix-backslash:no
fix-bad-comments:no
fix-uri:no
input-xml:yes
join-styles:no
lower-literals:no
preserve-entities:yes
quote-ampersand:no
quote-nbsp:no

[Diagnostics Options]
show-warnings:no

[Pretty Print Options]
indent:yes
indent-spaces:3
tab-size:3

[Miscellaneous Options]
quiet:yes

我还没试过这些选项(input-xml: yesforce-output: yesHTML整理提到的配置建议https://stackoverflow.com/questions/7151180/use-html-tidy-to-just-indent-html-code可以用于我的直接目的),如果我这样做,将更新这个答案。


0

通过HTML Tidy运行该文件。

例如:

curl http://superuser.com | tidy -i | less

-i 用于缩进输入。


1
第一段man tidy说:对于HTML varians,它检测并纠正许多常见的编码错误。这使其对原始内容具有破坏性。
kine 2013年

@kine:哦,好吧,如果手册页的第一段说的话,我甚至都不会尝试。
Der Hochstapler 2013年

1
@kine我在这里找到答案:stackoverflow.com/questions/7151180 / ...特别是对答案的第二个评论。使用该配置运行它(以及input-xml yes和force-output yes)将其大部分非破坏性地缩进- “大部分”因为它仍然在HTML字符实体中进行更改,我想你必须追捕并更改该选项如果这对你来说是个问题。
sundar 2013年

0

在不解析/修复文档的情况下执行此操作的最简单方法是查找结束标记,然后是开放角括号或空格,并插入换行符。搜索:

(</[^>]+>)(<|\s)

并替换为

$1\n$2

您仍然需要手动检查每个输出文档并验证它没有破坏任何内容,但这应该适用于大多数情况。它不会输出很多,但它应该会消耗50KB的行。


这是可能的。这可能是我必须要去的那个。
2013年

0

另一个选择是使用没有参数的pup

pup

xmllint --html使用HTML解析器并--format重新格式化输入。STDIN的破折号不能省略。

xmllint --format --html -

XmlStarlet还支持使用HTML解析器。fo是的缩写format。请参阅xml fo -h寻求帮助。

xml fo --html

主要实现tidy不支持HTML5,但tidy-html5确实如此。brew install tidy-html5安装tidy-html5/usr/local/bin/tidy在OS X

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.