一個任務是制作一個 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 代碼,或者可能以某種方式保留標簽內的換行符?
uj5u.com熱心網友回復:
不幸的是,JSoup 的主要用例不是創建可供人類閱讀或編輯的 HTML。具體來說,JSoup 的 API 非常接近DOM建模,它無法在標簽記憶體儲或建模換行符,因此無法保存它們。
我只能想到兩個解決方案:
查找(或撰寫)一個替代的 HTML 決議器庫,該庫具有保留標簽內格式的 API。如果這樣的事情已經存在,我會感到驚訝。
通過支持包裝內部標簽的格式化程式運行生成的代碼。這不會保留原始換行符,但至少屬性不會全部在一行上。我無法找到執行此操作的 Java 庫,因此您可能需要考慮使用外部程式。
uj5u.com熱心網友回復:
似乎沒有什么好的方法可以在將標簽決議為 POJO(或者我還沒有找到)時保留標簽內的中斷,因此我撰寫了一個簡單的標記器,它將傳入的 HTML 字串拆分為如下所示的部分:
String[] parts = html.split( "((?=<)|(?<=>))" );
這使用正則運算式查找來拆分 before<和 after >。然后只需遍歷部分并決定是否插入屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/462519.html
上一篇:使用API結果填充模型
