一份乒、XML(Extensible Markup Language)可擴(kuò)展標(biāo)記語(yǔ)言
xml的用處:是用來(lái)寫(xiě)配置文件的澎剥,比起properties文件寫(xiě)的鍵值對(duì)遏弱,xml來(lái)存儲(chǔ)配置文件、更加的功能完善和易于閱讀管理杰刽。
xml與html的區(qū)別:
1肺然、xml 語(yǔ)法嚴(yán)格蔫缸、html語(yǔ)法松散。
2际起、html是展示數(shù)據(jù)用的拾碌、xml是存儲(chǔ)數(shù)據(jù)用的吐葱。
3、html的標(biāo)簽都是預(yù)定義好的倦沧、xml的標(biāo)簽需要我們自己定義唇撬。
二、程序員和計(jì)算機(jī)怎么規(guī)定語(yǔ)言的規(guī)則展融?——>約束
約束有兩種:DTD約束、Scheme約束豫柬。
三告希、DTD約束
內(nèi)部dtd:約束寫(xiě)在xml文件內(nèi)(不推薦,因?yàn)闆](méi)法復(fù)用烧给,而且耦合度高)
外部dtd:將約束的規(guī)則定義在外部的dtd文件中
- 本地:<!DOCTYPE 根標(biāo)簽名 SYSTEM "dtd文件的位置">
- 網(wǎng)絡(luò):<!DOCTYPE 根標(biāo)簽名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
DTD文件樣例:
<!ELEMENT note (to, from, heading, body)> //note標(biāo)簽中有to, from, heading, body子標(biāo)簽
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
DTD只能規(guī)定要寫(xiě)那些標(biāo)簽燕偶,但是對(duì)于標(biāo)簽的內(nèi)容并無(wú)法做到詳細(xì)的規(guī)定,這時(shí)就需要更強(qiáng)大的Scheme約束來(lái)進(jìn)行規(guī)定础嫡。
四指么、Scheme約束
- 引入:
1.填寫(xiě)xml文檔的根元素
2.引入xsi前綴. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.引入xsd文件命名空間. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4.為每一個(gè)xsd約束聲明一個(gè)前綴,作為標(biāo)識(shí) xmlns="http://www.itcast.cn/xml"
在xml文件中寫(xiě)上這樣的即可:
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itcast.cn/xml"
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd">
五、解析XML
有兩種解析方式:
①榴鼎、一次解析全文本——DOM方式
- 將XML一次性加載進(jìn)內(nèi)存伯诬,形成一顆DOM樹(shù),缺點(diǎn)是可能比較占內(nèi)存巫财。
- 可以對(duì)XML文檔進(jìn)行CRUD(增查改刪)操作盗似。
②、一行一行解析——SAX方式 - 逐行解析平项,基于事件驅(qū)動(dòng)的赫舒。
- 雖然不占內(nèi)存,但是不能進(jìn)行CUD(增改刪)操作闽瓢,只能查詢(xún)接癌。
六、常見(jiàn)的解析引擎
- JAXP:sun公司提供的解析器扣讼,支持dom和sax兩種思想
- DOM4J:一款非常優(yōu)秀的解析器
- Jsoup:jsoup 是一款Java 的HTML解析器缺猛,可直接解析某個(gè)URL地址、HTML文本內(nèi)容届谈。它提供了一套非常省力的API枯夜,可通過(guò)DOM,CSS以及類(lèi)似于jQuery的操作方法來(lái)取出和操作數(shù)據(jù)艰山。
- PULL:Android操作系統(tǒng)內(nèi)置的解析器湖雹,sax方式的。
Jsoup的使用:
步驟:
- 導(dǎo)入jar包
- 獲取Document對(duì)象
- 使用ClassLoader加載xml到內(nèi)存中曙搬,再用Jsoup的parse方法返回Document對(duì)象摔吏。
parse?(File in, String charsetName):解析xml或html文件的鸽嫂。
parse?(String html):解析xml或html字符串
parse?(URL url, int timeoutMillis):通過(guò)網(wǎng)絡(luò)路徑獲取指定的html或xml的文檔對(duì)象
- 使用ClassLoader加載xml到內(nèi)存中曙搬,再用Jsoup的parse方法返回Document對(duì)象摔吏。
String path=JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
- 獲取對(duì)應(yīng)的標(biāo)簽Element對(duì)象
- 使用Document對(duì)象相關(guān)get方法。
getElementById?(String id):根據(jù)id屬性值獲取唯一的element對(duì)象
getElementsByTag?(String tagName):根據(jù)標(biāo)簽名稱(chēng)獲取元素對(duì)象集合
getElementsByAttribute?(String key):根據(jù)屬性名稱(chēng)獲取元素對(duì)象集合
getElementsByAttributeValue?(String key, String value):根據(jù)對(duì)應(yīng)的屬性名和屬性值獲取元素對(duì)象集合
- 使用Document對(duì)象相關(guān)get方法。
- 獲取數(shù)據(jù)
- String attr(String key):根據(jù)屬性名稱(chēng)獲取屬性值
- String text():獲取文本內(nèi)容
- String html():獲取標(biāo)簽體的所有內(nèi)容(包括字標(biāo)簽的字符串內(nèi)容)
如何快捷查詢(xún):可以使用selector選擇器征讲,具體用法查詢(xún)W3C手冊(cè)即可据某,用法和CSS的選擇器挺像的。
注意:使用Jsoup的Xpath需要額外導(dǎo)入jar包诗箍。