[英]Java add attribute to HTML tags without changing formatting
A 有一个任务是制作一个 maven 插件,它在特定位置获取 HTML 个文件,并为每个没有它的标签添加一个服务属性。 这是在源代码上完成的,这意味着我和我的同事将不得不进一步编辑这些文件。
作为第一个解决方案,我求助于Jsoup
,它似乎可以完成这项工作,但有一个小而烦人的问题:如果我们有一个带有多个长属性的标签(我们经常这样做,因为这个 HTML 代码是进一步处理的来源)我们包装像这样的行:
<ui:grid id="category_search" title="${handler.getMessage( 'title' )}"
class="is-small is-outlined is-hoverable is-foldable"
filterListener="onApplyFilter" paginationListener="onPagination" ds="${handler.ds}"
filterFragment="grid_filter" contentFragment="grid_contents"/>
然而, Jsoup
将其变成了一行很长的代码:
<ui:grid id="category_search" title="${handler.getMessage( 'title' )}" class="is-small is-outlined is-hoverable is-foldable" filterListener="onApplyFilter" paginationListener="onPagination" ds="${handler.ds}" filterFragment="grid_filter" contentFragment="grid_contents"/>
这是一种不好的做法,阅读和编辑真的很痛苦。
那么有没有其他不太复杂的方法来添加这个属性而不解析和重组 HTML 代码或者可能以某种方式保留标签内的换行符?
不幸的是,JSoup 的主要用例不是创建由人类读取或编辑的 HTML。 具体来说,JSoup 的 API 非常接近无法存储的DOM或标签内的 model 换行符,因此无法保留它们。
我只能想到两个解决方案:
找到(或编写)一个替代的 HTML 解析器库,它有一个 API 保留标签内的格式。 如果这样的事情已经存在,我会感到惊讶。
通过支持包装在标签内的格式化程序运行生成的代码。 这不会保留原始换行符,但至少属性不会全部在一行上。 我找不到 Java 库来执行此操作,因此您可能需要考虑使用外部程序。
似乎没有什么好方法可以在将标签解析为 POJO 时保留标签内的中断(或者我还没有找到),所以我编写了一个简单的分词器,它将传入的 HTML 字符串分成如下所示的部分:
String[] parts = html.split( "((?=<)|(?<=>))" );
这使用正则表达式查找在<
之前和>
之后拆分。 然后只需遍历零件并决定是否插入属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.