【问题标题】:Bulk find and remove parts of HTML files using CMD or JavaScript使用 CMD 或 JavaScript 批量查找和删除部分 HTML 文件
【发布时间】:2018-03-18 15:09:41
【问题描述】:

假设我在文件夹中有一组文本 .html 文件。

我需要处理每个文件并删除特定 HTML 标记的内容,包括标记本身。文件处理后必须重写。

例子:

  1. 删除所有<script>
  2. 删除所有 <div class="test-class"> 块,包括内部内容

sed -i -e 's/REGEX//g' *.html 等正则表达式工具不适合 HTML 处理。因此,我正在寻找专注于 HTML 解析的解决方案,例如基于 XPATH 的 //script//div[@class="test-class"]

最好的方法是什么?

【问题讨论】:

  • 我建议使用 XML/HTML 解析器 (xmlstarlet, xmllint ...)。
  • 如果您 edit 您的问题包括一个简洁、可测试的样本输入和预期输出的示例,那么我希望您能得到帮助。

标签: javascript html xpath sed html-parsing


【解决方案1】:

使用 xmlstarlet 编辑当前目录中的所有 .html 文件:

xmlstarlet edit --inplace --omit-decl --delete '//script' --delete '//div[@class="test-class"]' *.html

见:xmlstarlet edit --help

这可能有助于处理损坏的 html 文件:

xmlstarlet format --recover --html file.html |\
  xmlstarlet edit --omit-decl --delete '//script' --delete '//div[@class="test-class"]' > new.html

【讨论】:

  • 感谢@Cyrus。但是xmlstarlet的问题在于它对html格式非常敏感,会产生Opening and ending tag mismatchCouldn't find end of Start Tag html之类的错误。它没有任何内置的 html 规范化工具,在将 html 文件传递​​给 xmlstarlet 之前,我看不到如何格式化它们的简单方法。
  • @AlexDasata 您可以先通过 HTML Tidy html-tidy.org github.com/htacg/tidy-html5 运行文件,然后再将它们传递给 xmlstarlet
猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2021-12-09
相关资源
最近更新 更多