Groovy (Java) Jsoup 解析

API

具體文檔請見:
英文官網:
中文頁面:(由深度開源譯製)
官方API:

需求

筆記模版功能須要把前端製做好的筆記模版 html 頁面中的 data-setting 屬性進行拆分,data-setting 中的數據是 JSONObject 格式,經過拆分,解析內部的屬性,經過屬性對日程進行具體的篩選查詢。
 
由前端傳入的頁面以下,裏面的 data-setting 已經標記爲藍色
 
 1 <h4 title='keep'>Keep:今日完成了哪些工做</h4>
 2 <p class='unselection-wrapper' data-unique-id='52ce32fd-ab80-ca58-6043-b1b1c28630b7' data-task-block='true' data-setting='{&quot;preContext&quot;:&quot;taskTime&quot;,&quot;taskContent&quot;:[],&quot;subTodo&quot;:&quot;currentDone&quot;,&quot;filter&quot;:{&quot;type&quot;:&quot;current&quot;,&quot;doneState&quot;:&quot;finished&quot;,&quot;pContainer&quot;:[&quot;IE&quot;,&quot;IU&quot;,&quot;UE&quot;,&quot;UU&quot;],&quot;label&quot;:[],&quot;kanban&quot;:[]}}'>
 3 <inherit> <span class='unselection-inline-wrapper'> <span class='unselection-task-block unselection-content' contenteditable='false'> <span data-title='自動填充日程任務'></span> <span data-sub-title='篩選結果:當日完成的任務'></span> <span class='simditor-r-icon-setting unselection-task-block-setting'></span> <span class='simditor-r-icon-close unselection-attach-delete'></span> </span>
 4 </span>
 5 </inherit>
 6 </p>
 7 <p><br></p>
 8 <h4 title='problem'>Problem:遇到了什麼問題?</h4>
 9 <p><br></p>
10 <h4 title='try'>Try:準備嘗試哪些措施</h4>
11 <p><br></p>
12 <h4>今日未完</h4>
13 <p><br></p>
14 <h4 title='plan'>Plan:明日的任務</h4>
15 <p class='unselection-wrapper' data-unique-id='cc466372-493e-6bb1-056b-5ed6d1b07ebd' data-task-block='true' data-setting='{&quot;preContext&quot;:&quot;taskTime&quot;,&quot;taskContent&quot;:[],&quot;subTodo&quot;:&quot;none&quot;,&quot;filter&quot;:{&quot;type&quot;:&quot;next&quot;,&quot;doneState&quot;:&quot;all&quot;,&quot;pContainer&quot;:[&quot;IE&quot;,&quot;IU&quot;,&quot;UE&quot;,&quot;UU&quot;],&quot;label&quot;:[],&quot;kanban&quot;:[]}}'>
16 <inherit> <span class='unselection-inline-wrapper'> <span class='unselection-task-block unselection-content' contenteditable='false'> <span data-title='自動填充日程任務'></span> <span data-sub-title='篩選結果:明天任務、所有'></span> <span class='simditor-r-icon-setting unselection-task-block-setting'></span> <span class='simditor-r-icon-close unselection-attach-delete'></span> </span>
17 </span>
18 </inherit>
19 </p>

 

使用示例

一、使用 Jsoup 拆解元素後把屬性內容返回

Jsoup 具備自動補全的功能,即便上述頁面不是一個完整的 html 頁面(沒有 <html> 標籤,沒有<body> 體),Jsoup 也能智能的進行補全操做(自動添加 <html> 標籤和 <body> 標籤)。
 
我要作的是,把這個頁面當成一個參數傳入某接口,並在接口中經過 Jsoup 進行拆分,最後把 data-setting 屬性轉換成 JSONObject 返回給前端。
 
請求格式:
 
接口樣式:
 

測試

一、接受 content 參數,能夠看到成功接收
 
 
二、經過 Jsoup 以後,頁面改變爲完成的 html 格式
 

三、獲取含有 data-setting 的屬性的 domhtml

 
四、把其中的一個轉換成 JSONObject 以後返回結果
 
 
五、前端收到返回結果
 

二、固然,也能夠經過 Jsoup 拆解 HTML 頁面後,從新填寫頁面中的屬性和 DOM 元素再把頁面返回

 

 

其中,能夠經過 Element.attr("attribute","value") 來進行屬性值的設計。一樣的操做能夠用於填充 DOM 的內容或者直接填充 DOM 元素。
 
最後返回時,若是須要返回 <html> 體的內容,那麼直接 Document.body() 能夠獲取 doc 中 <body> 體中的元素,再經過 Element.html() 返回一個字符串類型的 html 頁面。
 
返回結果:
 1 <h4 title="keep">Keep:今日完成了哪些工做</h4>
 2 <p class="unselection-wrapper" data-unique-id="52ce32fd-ab80-ca58-6043-b1b1c28630b7" data-task-block="true" data-setting="日了狗">
 3  <inherit> 
 4   <span class="unselection-inline-wrapper"> <span class="unselection-task-block unselection-content" contenteditable="false"> <span data-title="自動填充日程任務"></span> <span data-sub-title="篩選結果:當日完成的任務"></span> <span class="simditor-r-icon-setting unselection-task-block-setting"></span> <span class="simditor-r-icon-close unselection-attach-delete"></span> </span> </span> 
 5  </inherit></p>
 6 <p><br /></p>
 7 <h4 title="problem">Problem:遇到了什麼問題?</h4>
 8 <p><br /></p>
 9 <h4 title="try">Try:準備嘗試哪些措施</h4>
10 <p><br /></p>
11 <h4>今日未完</h4>
12 <p><br /></p>
13 <h4 title="plan">Plan:明日的任務</h4>
14 <p class="unselection-wrapper" data-unique-id="cc466372-493e-6bb1-056b-5ed6d1b07ebd" data-task-block="true" data-setting="{&quot;preContext&quot;:&quot;taskTime&quot;,&quot;taskContent&quot;:[],&quot;subTodo&quot;:&quot;none&quot;,&quot;filter&quot;:{&quot;type&quot;:&quot;next&quot;,&quot;doneState&quot;:&quot;all&quot;,&quot;pContainer&quot;:[&quot;IE&quot;,&quot;IU&quot;,&quot;UE&quot;,&quot;UU&quot;],&quot;label&quot;:[],&quot;kanban&quot;:[]}}">
15  <inherit> 
16   <span class="unselection-inline-wrapper"> <span class="unselection-task-block unselection-content" contenteditable="false"> <span data-title="自動填充日程任務"></span> <span data-sub-title="篩選結果:明天任務、所有"></span> <span class="simditor-r-icon-setting unselection-task-block-setting"></span> <span class="simditor-r-icon-close unselection-attach-delete"></span> </span> </span> 
17  </inherit></p>

 

注意點

一、經過 Jsoup 解析後,首先是一個 
org.jsoup.nodes.Document
須要再用 Elements 解析後使用
二、Elements 解析是一個數組的格式,
 
                                                          2017-08-09 11:54:55 原創  轉載註明出處
相關文章
相關標籤/搜索