xml

什么是xml

XML 指可擴(kuò)展標(biāo)記語(yǔ)言(EXtensible Markup Language)
XML 是一種標(biāo)記語(yǔ)言省有,很類似 HTML
XML 的設(shè)計(jì)宗旨是傳輸數(shù)據(jù)痒留,而非顯示數(shù)據(jù)
XML 標(biāo)簽沒(méi)有被預(yù)定義。您需要自行定義標(biāo)簽蠢沿。
XML 被設(shè)計(jì)為具有自我描述性伸头。
XML 是 W3C 的推薦標(biāo)準(zhǔn)


html與xml區(qū)別

XML 不是 HTML 的替代。

XML 和 HTML 為不同的目的而設(shè)計(jì):
XML 被設(shè)計(jì)為傳輸和存儲(chǔ)數(shù)據(jù)舷蟀,其焦點(diǎn)是數(shù)據(jù)的內(nèi)容恤磷。
HTML 被設(shè)計(jì)用來(lái)顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀野宜。
HTML 旨在顯示信息扫步,而 XML 旨在傳輸信息。

HTML語(yǔ)法比較松散匈子,xml語(yǔ)法嚴(yán)格
HTML所有標(biāo)簽都是預(yù)先定義好的河胎, 使用固定的標(biāo)簽,展示不同的內(nèi)容
XML當(dāng)中的標(biāo)簽都是自己定義的

XML用處:
? 數(shù)據(jù)存儲(chǔ)
? 配置文件
? 數(shù)據(jù)傳輸


基本語(yǔ)法

文檔聲明

? 必須寫(xiě)在文檔的第一行
? 寫(xiě)法:<?xml version="1.0">

屬性

version版本號(hào)虎敦,固定1.0
encoding指定文檔的碼表 默認(rèn)iso-8859-1
standalone指定文檔是否獨(dú)立yes或no
是否可以引用其它文件

規(guī)則

所有 XML 元素都須有關(guān)閉標(biāo)簽
XML 標(biāo)簽對(duì)大小寫(xiě)敏感
XML 必須正確地嵌套
XML 文檔必須有根元素
XML 的屬性值須加引號(hào)

實(shí)體引用

在 XML 中游岳,一些字符擁有特殊的意義。
如果你把字符 "<" 放在 XML 元素中原茅,會(huì)發(fā)生錯(cuò)誤吭历,這是因?yàn)榻馕銎鲿?huì)把它當(dāng)作新元素的開(kāi)始。

這樣會(huì)產(chǎn)生 XML 錯(cuò)誤:

為了避免這個(gè)錯(cuò)誤擂橘,請(qǐng)用實(shí)體引用來(lái)代替 "<" 字符:

5 個(gè)預(yù)定義的實(shí)體引用

? < < 小于
? > > 大于
? & & 和號(hào)
? ' ' 單引號(hào)
? " " 引號(hào)

文本

轉(zhuǎn)義字符
CDATA

? 里面的數(shù)據(jù)會(huì)原樣顯示
? <![CDATA[數(shù)據(jù)內(nèi)容]]>

屬性

屬性值必須引用引起晌区,單雙都行

演示

?

XML約束

什么是約束

規(guī)定文檔當(dāng)中只能寫(xiě)哪些標(biāo)簽。并且會(huì)給一些提示

約束分類

DTD約束

? 內(nèi)部dtd
? 在xml當(dāng)中定義的dtd

? 外部dtd

? 在外部文件當(dāng)中單獨(dú)定義的dtd
? 本地:<!DOCTYPE 名稱 SYSTEM "student.dtd"
? 網(wǎng)絡(luò):<!DOCTYPE students PUBLIC "命名空間" "student.dtd"

? 約束語(yǔ)法
?

? 學(xué)習(xí)要求

? 不要求自己寫(xiě)出來(lái)通贞,能看懂別人寫(xiě)的dtd約束

? 存在的問(wèn)題

? 在標(biāo)簽當(dāng)中存放的內(nèi)容不知道是什么類型朗若,寫(xiě)的都是漢字,這種約束不嚴(yán)謹(jǐn)

schema

復(fù)雜標(biāo)簽

標(biāo)簽當(dāng)中還有子標(biāo)簽

簡(jiǎn)單標(biāo)簽

標(biāo)簽當(dāng)中沒(méi)有子標(biāo)簽了

語(yǔ)法

type 起的別名

complexType   name="students"

sequence

    element  name=""   minOccur相當(dāng)于dtd的*


simpleTyle

    restriction  base="xsd:string"  限制簡(jiǎn)單標(biāo)簽當(dāng)中的數(shù)據(jù)類型

schema分析

使用過(guò)程
編寫(xiě)根標(biāo)簽
引用約束地址 xsi:schemaLocation="默認(rèn)空間 約束地址.xsd"
引用實(shí)例名稱空間 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
默認(rèn)名稱空間 xmlns="http://www.it666.cn/xml"


xml解析

XML文檔結(jié)構(gòu)

XML的樹(shù)結(jié)構(gòu)

?

使用一種方式來(lái)表示整個(gè)xml

結(jié)點(diǎn)

? 文檔結(jié)點(diǎn)

? 元素結(jié)點(diǎn)


? 屬性結(jié)點(diǎn)


? 文本結(jié)點(diǎn)


DOM

什么是DOM

? DOM:Document Object Model:文檔對(duì)象模型,把文檔中的成員描述成一個(gè)個(gè)對(duì)象.

? 使用Java代碼操作XML 或者 js代碼操作HTML

DOM解析的特點(diǎn)

? 在加載的時(shí)候,一次性的把整個(gè)XML文檔加載進(jìn)內(nèi)存,在內(nèi)存中形成一顆樹(shù)(Document對(duì)象).

? 以后使用代碼操作Document,其實(shí)操作的是內(nèi)存中的DOM樹(shù),和本地磁盤(pán)中的XML文件沒(méi)有直接關(guān)系.

? 由于操作的是內(nèi)存當(dāng)中的dom,磁盤(pán)中xml當(dāng)中的內(nèi)容并沒(méi)有變昌罩,要進(jìn)行同步哭懈,讓兩邊保持一致

? 查詢不需要同步,只有數(shù)據(jù)變化的時(shí)候茎用,才需要同步

? 缺點(diǎn):若XML文件過(guò)大,可能造成內(nèi)存溢出.

DOM解析步驟

? 1.創(chuàng)建解析器工廠

? 2.通過(guò)解析器工廠得到解析器

? 3.通過(guò)解析器得到document對(duì)象

? 4.獲取具體的節(jié)點(diǎn)內(nèi)容

DOM修改元素內(nèi)容

? 1.獲取所有指定節(jié)點(diǎn)

? 2.獲取要修改的節(jié)點(diǎn)

? 3.修改元素內(nèi)容

? 4.從內(nèi)存寫(xiě)到文檔做同步操作

DOM添加元素

? 1.創(chuàng)建一個(gè)節(jié)點(diǎn)

? 2.設(shè)置元素內(nèi)容

? 3.獲取要添加元素的父結(jié)點(diǎn)

? 4.添加節(jié)點(diǎn)

? 5.從內(nèi)存寫(xiě)到文檔做同步操作

DOM刪除元素

? 1.獲取一個(gè)節(jié)點(diǎn)

? 2.獲取該節(jié)點(diǎn)的父節(jié)點(diǎn)遣总,從父節(jié)點(diǎn)當(dāng)中移除

? 3.從內(nèi)存寫(xiě)到文檔做同步操作

? DOM添加元素屬性

? 1.獲取要添加屬性的節(jié)點(diǎn)

? 2.把獲取的節(jié)點(diǎn)強(qiáng)制轉(zhuǎn)換成element

? 3.設(shè)置屬性

? 4.從內(nèi)存寫(xiě)到文檔做同步操作

?

dom4j

Sax解析介紹

? 逐行讀取睬罗,基于事件驅(qū)動(dòng)

? 優(yōu)點(diǎn):不占內(nèi)存,速度快

? 缺點(diǎn):只能讀取旭斥,不能回寫(xiě)

? 解析流程

?

? DOM4j介紹

? DOM4J是dom4j.org出品的一個(gè)開(kāi)源XML解析包

? dom4j是一個(gè)十分優(yōu)秀的JavaXML API容达,具有性能優(yōu)異、功能強(qiáng)大和極其易使用的特點(diǎn)垂券,它的性能超過(guò)sun公司官方的dom技術(shù)花盐,同時(shí)它也是一個(gè)開(kāi)放源代碼的軟件

? 越來(lái)越多的Java軟件都在使用dom4j來(lái)讀寫(xiě)XML,特別值得一提的是連Sun的JAXM也在用dom4j菇爪。這已經(jīng)是必須使用的jar包算芯, Hibernate也用它來(lái)讀寫(xiě)配置文件。

dom4j解析步驟

? 下載Dom4j的jar包

? 在工程根目錄當(dāng)中創(chuàng)建一個(gè)文件夾為lib

? 編譯jar包

? 創(chuàng)建SAXReader

? 讀取指定路徑的xml

獲取所有指定標(biāo)簽內(nèi)容

? 1.創(chuàng)建SAXReader

? 2.獲取根元素

? 3.根據(jù)名稱獲取根元素下的所有標(biāo)簽

? 4.遍歷每一個(gè)子元素

? 5.獲取指定名稱的元素

? 6.獲取標(biāo)簽當(dāng)中的文本

獲取全部標(biāo)簽內(nèi)容

? 1.創(chuàng)建SAXReader

? 2.獲取根元素

? 3.獲取根元素下所有的元素

? 4.遍歷每一個(gè)子元素

添加元素

? 1.創(chuàng)建SAXReader

? 2.獲取根元素

? 3.給根元素添加元素和屬性凳宙,并返回添加的元素

?

Writer wr = new OutputStreamWriter(new FileOutputStream("src/com/xml/dom4j/student.xml"),"UTF-8");  
doc.write(wr);  
wr.close();
//pretty print the document to System.out  美化dom4j傳輸xml   固定死的代碼,文件回寫(xiě)
OutputFormat format = OutputFormat.createPrettyPrint();
Writer wr = new OutputStreamWriter(new FileOutputStream("src\\xml\\student.xml"),"UTF-8"); 
XMLWriter writer = new XMLWriter(wr,format);
writer.write(doc);
wr.close();//必須要關(guān)閉
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末熙揍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子氏涩,更是在濱河造成了極大的恐慌诈嘿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件削葱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淳梦,警方通過(guò)查閱死者的電腦和手機(jī)析砸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)爆袍,“玉大人首繁,你說(shuō)我怎么就攤上這事≡赡遥” “怎么了弦疮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜘醋。 經(jīng)常有香客問(wèn)我胁塞,道長(zhǎng),這世上最難降的妖魔是什么压语? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任啸罢,我火速辦了婚禮,結(jié)果婚禮上胎食,老公的妹妹穿的比我還像新娘扰才。我一直安慰自己,他們只是感情好厕怜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布衩匣。 她就那樣靜靜地躺著蕾总,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琅捏。 梳的紋絲不亂的頭發(fā)上生百,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音午绳,去河邊找鬼置侍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拦焚,可吹牛的內(nèi)容都是我干的蜡坊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赎败,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秕衙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起僵刮,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤据忘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后搞糕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體勇吊,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年窍仰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汉规。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驹吮,死狀恐怖针史,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碟狞,我是刑警寧澤啄枕,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站族沃,受9級(jí)特大地震影響频祝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脆淹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一智润、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧未辆,春花似錦窟绷、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)攘残。三九已至,卻和暖如春为狸,著一層夾襖步出監(jiān)牢的瞬間歼郭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工辐棒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留病曾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓漾根,卻偏偏與公主長(zhǎng)得像泰涂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辐怕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容