本文转载自
u011627980
查看原文
2016-03-04
0
業務描述:在我們系統中要這樣一個需求,我們會將html當作字符串保存在數據庫中,然后再后期通過Java需要操作這個html比如增加一個文件框,改變其結構,添加事件。解決方案:jsoup Java HTML解析器使用方法:1.導入jar包。可以使用maven幫你下載這個jar包和源碼Maven代碼 收藏代碼 org.jsoup jsoup 1.3.3 2.將字符串變成HTML文檔結構Java代碼 收藏代碼Document doc = Jsoup.parse(html); 有了上面的方法,就可以將一個字符串變成一個document文檔結構,然后就可以類似於jQuery的方法來選擇元素,添加元素,設置屬性等等操作。3.查找元素(都是見名知意的方法,多好……)getElementById(String id)getElementsByTag(String tag)getElementsByClass(String className)getElementsByAttribute(String key) (and related methods)兄弟節點: siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()層級節點: parent(), children(), child(int index)4.獲取元素屬性attr(String key)獲取屬性attr(String key, String value)設置屬性attributes()獲取所有屬性id(), className() and classNames()text()獲取文本內容text(String value) 設置文本內容html()獲取元素內HTMLhtml(String value)設置元素內的HTML內容outerHtml()獲取元素外HTML內容data()獲取數據內容(例如:script和style標簽)tag() and tagName()5.設置htmlA.append(String html)Add the supplied HTML to the end of each matched element's inner HTML.(結尾插)B.prepend(String html)Add the supplied HTML to the start of each matched element's inner HTML.(頭插)C.appendText(String text);prependText(String text)Create and append a new TextNode to this element.(插入或者創建文本節點)D.appendElement(String tagName), prependElement(String tagName)E.html(String value)6.選擇器A.Selector選擇器概述tagname: 通過標簽查找元素,比如:ans|tag: 通過標簽在命名空間查找元素,比如:可以用 fb|name 語法來查找 元素#id: 通過ID查找元素,比如:#logo.class: 通過class名稱查找元素,比如:.masthead[attribute]: 利用屬性查找元素,比如:[href][^attr]: 利用屬性名前綴來查找元素,比如:可以用[^data-] 來查找帶有HTML5 Dataset屬性的元素[attr=value]: 利用屬性值來查找元素,比如:[width=500][attr^=value], [attr$=value], [attr*=value]: 利用匹配屬性值開頭、結尾或包含屬性值來查找元素,比如:[href*=/path/][attr~=regex]: 利用屬性值匹配正則表達式來查找元素,比如: img[src~=(?i)\.(png|jpe?g)]*: 這個符號將匹配所有元素B.Selector選擇器組合使用el#id: 元素+ID,比如: div#logoel.class: 元素+class,比如: div.mastheadel[attr]: 元素+class,比如: a[href]任意組合,比如:a[href].highlightancestor child: 查找某個元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素parent > child: 查找某個父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body標簽下所有直接子元素siblingA + siblingB: 查找在A元素之前第一個同級元素B,比如:div.head + divsiblingA ~ siblingX: 查找A元素之前的同級X元素,比如:h1 ~ pel, el, el:多個選擇器組合,查找匹配任一選擇器的唯一元素,例如:div.masthead, div.logoC.偽選擇器selectors:lt(n): 查找哪些元素的同級索引值(它的位置在DOM樹中是相對於它的父節點)小於n,比如:td:lt(3) 表示小於三列的元素:gt(n):查找哪些元素的同級索引值大於n,比如: div p:gt(2)表示哪些div中有包含2個以上的p元素:eq(n): 查找哪些元素的同級索引值與n相等,比如:form input:eq(1)表示包含一個input標簽的Form元素:has(seletor): 查找匹配選擇器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素:not(selector): 查找與選擇器不匹配的元素,比如: div:not(.logo) 表示不包含 class=logo 元素的所有 div 列表:contains(text): 查找包含給定文本的元素,搜索不區分大不寫,比如: p:contains(jsoup):containsOwn(text): 查找直接包含給定文本的元素:matches(regex): 查找哪些元素的文本匹配指定的正則表達式,比如:div:matches((?i)login):matchesOwn(regex): 查找自身包含文本匹配指定正則表達式的元素注意:上述偽選擇器索引是從0開始的,也就是說第一個元素索引值為0,第二個元素index為1等7.更多細節查看:http://www.open-open.com/jsoup/parsing-a-document.htm