第四部分 XML

Xml(extensible markup language)可擴(kuò)展的標(biāo)記語言

XML 被設(shè)計用來傳輸和存儲少量數(shù)據(jù)。

html是用來顯示信息

html標(biāo)簽是定義好的团赏,xml的標(biāo)簽是自己定義的

xml具有很強(qiáng)的自我描述能力

XML 文檔形成一種樹結(jié)構(gòu)

XML 文檔必須包含根元素双谆。該元素是所有其他元素的父元素佃扼。

XML 文檔中的元素形成了一棵文檔樹。這棵樹從根部開始拟糕,并擴(kuò)展到樹的最底端。


XML語法

1.文檔聲明

2.標(biāo)記元素

必須有根元素

所有 XML 元素都須有關(guān)閉標(biāo)簽

XML 標(biāo)簽對大小寫敏感

XML里空格會得到保留

3.屬性,與html一樣已卸,XML 的屬性值須加引號

盡量少使用屬性佛玄,用子元素替代屬性(屬性不靈活,屬性難以閱讀和維護(hù))

比如字體可以把字體大小設(shè)置為子元素或者屬性累澡,設(shè)置屬性后梦抢,如果你想把一個子元素添加到字體大小里,是不可能的

4.實(shí)體?在 XML 中愧哟,一些字符擁有特殊的意義奥吩。

5.XML 命名規(guī)則

XML 元素必須遵循以下命名規(guī)則:

名稱可以含字母、數(shù)字以及其他的字符

名稱不能以數(shù)字或者標(biāo)點(diǎn)符號開始

名稱不能以字符 “xml”(或者 XML蕊梧、Xml)開始

名稱不能包含空格


XML是可擴(kuò)展的可以通過JS往里面寫內(nèi)容


XML約束(用來約束XML樹的編寫結(jié)構(gòu))

擁有正確語法的XML稱為形式良好的XML(最根本)

通過約束的成為合法XML


dtd約束(了解)

為什么使用 DTD霞赫?

通過 DTD,您的每一個 XML 文件均可攜帶一個有關(guān)其自身格式的描述肥矢。

通過 DTD端衰,獨(dú)立的團(tuán)體可一致地使用某個標(biāo)準(zhǔn)的 DTD 來交換數(shù)據(jù)。

DTD規(guī)定了XML文檔的結(jié)構(gòu)(有哪些元素甘改,哪些屬性等)


注:如果dtd規(guī)范的是一個集合的話旅东,可以在根元素聲明時使用

<!ELEMENT notes(note+)> 說明這個notes集合里裝了多個note對象

內(nèi)部的 DOCTYPE 聲明

外部的DOCTYPE 聲明(常用,使XML文檔變得簡潔)

注:

1.ELEMENT規(guī)則用于指定某個元素可以擁有什么樣的子元素

2..PCDATA 是會被解析器解析的文本十艾。這些文本將被解析器檢查實(shí)體以及標(biāo)記(表示沒有子元素)

3..CDATA 是不會被解析器解析的文本

在XML文檔中的所有文本都會被解析器解析抵代,只有在CDATA部件之內(nèi)的文本會被解析器忽略。

? ? ? ? ?操作XML文件時忘嫉,如果允許用戶輸入內(nèi)容荤牍,例如∶"< "、">"庆冕、"/"康吵、""等,當(dāng)生成XML時访递,會破壞了XML結(jié)構(gòu)涎才,使數(shù)據(jù)中斷。而如果定義成了CDATA就不會中斷(讓解析器忽略其中內(nèi)容)

? ? ? ?為什么xml解析器要解析所有文本力九,因?yàn)橐粋€元素內(nèi)可能還有別的元素,xml解析器為了獲得所有的元素

4.元素聲明

<!ELEMENT 元素名稱 (元素內(nèi)容/類別)> ? empty表示空的類別

只有 PCDATA 的元素(只有文本)

<!ELEMENT 元素名稱 (#PCDATA)>

帶有任何內(nèi)容的元素

<!ELEMENT 元素名稱 ANY>

帶有子元素(序列)的元素

<!ELEMENT 元素名稱 (子元素名稱 1..)> ?子元素聲明順序必須固定

聲明只出現(xiàn)一次的子元素

<!ELEMENT 元素名稱 (子元素名稱)>

聲明最少出現(xiàn)一次的子元素

<!ELEMENT 元素名稱 (子元素名稱+)>

邑闺? 零次或一次 ?*零次或多次

聲明或元素

<!ELEMENT note ((message|body))>

例題:

<!ELEMENT CHAPTER(intro,(heading,(para|image|table|note|)+)+)>

表示每章以簡介開頭跌前,其后是一個或多個小節(jié),每個小節(jié)由一個標(biāo)題和1個或多個段落陡舅,圖片抵乓,表格或說明組成

注意:如果出現(xiàn)了#PCDATA,就不可以只用這種靈活的多層嵌套了

5.屬性聲明

<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認(rèn)值>(屬性名稱里可以使用或操作)

6.實(shí)體(了解)

<!ENTITY 實(shí)體名稱 "實(shí)體的值">

例:<!ENTITY writer "Bill Gates">表示&writer可以引用"Bill Gates"

<author>&writer;</author>

注釋:一個實(shí)體由三部分構(gòu)成: 一個和號 (&), 一個實(shí)體名稱, 以及一個分號 (;)。


Schema(了解)

定義可出現(xiàn)在文檔中的元素

定義可出現(xiàn)在文檔中的屬性

定義哪個元素是子元素

定義子元素的次序

定義子元素的數(shù)目

定義元素是否為空灾炭,或者是否可包含文本

定義元素和屬性的數(shù)據(jù)類型

XML Schema 是 DTD 的繼任者

<schema>元素是每一個XML Schema 的根元素

1.簡易元素

簡易元素指那些僅包含文本的元素茎芋。它不會包含任何其他的元素或?qū)傩浴?/p>

默認(rèn)值 default 屬性(不設(shè)置元素值時的值)

固定值 fixed 屬性(固定為這個值,不可再設(shè)置值)

2.屬性

默認(rèn)情況下屬性是可選的也就是可有可無蜈出,如果要更改為必須有田弥,則使用use="required"

3.限定

還有一些其它一些限定,具體使用具體查

4.復(fù)合元素

可以定義復(fù)合元素內(nèi):1.空2.僅包含元素3.僅包含文本4.混合內(nèi)容

例子:

約束

XML

Xml解析

Dom4j

解析步驟

思維方式铡原,先得到文檔偷厦,然后解析元素(先得到根元素再得到子元素 )

1導(dǎo)入jar文件

2創(chuàng)建解析器(以流的方式讀取XML文件)

3獲取解析的文檔(這時你已經(jīng)得到了這個XML的這個文檔)

4獲取解析的根元素

5解析子元素

1.下載dom4j-1.6.1.jar導(dǎo)入

2.SAXReader?reader?=new SAXReader();

3.Document?document?=?reader.read(new File("XXXX.xml")); //不要使用相對路徑

4.Element ele =?document.getRootElement();

5.List <Element> eles=ele.elements();

for(Element e:eles){

e.attribute("屬性名").getValue() ; ?//獲取屬性

e.elementText("子元素名")燕刻; ? //獲取子元素

//之后就可以通過構(gòu)造函數(shù)只泼,將值存到類中了

}

注:1.可以通過e.getName()得到根元素和子元素的名字

? ? ? ? 2.e.attribute().getName()獲取屬性名


如果層次 特別深可以使用遞歸的方式遍歷


生成xml文件

1創(chuàng)建Document對象

2準(zhǔn)備數(shù)據(jù)

3創(chuàng)建根節(jié)點(diǎn)

4添加子節(jié)點(diǎn)及其屬性

5生成對應(yīng)的xml文件

6把數(shù)據(jù)寫入到xml文件中

1.Document?doc =?DocumentHelper.createDocument();

2.List<Emp> emps=new ArrayList<>();

3.Element?ele = doc.addElement("emps");

4.for(Emp emp:emps){

Element el=ele.addElement("emp");//在主元素中添加元素

el.addAttribute("屬性名","屬性值")卵洗;

el.addElement("元素名"请唱,"元素值")

}

5.FileOutputStream fos=new?FileOutputStream("文件名");

6.XMLWriter?xmlWriter?=new XMLWriter();

xmlWriter.setOutputStream(fos);

xmlWriter.write(doc);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市过蹂,隨后出現(xiàn)的幾起案子十绑,更是在濱河造成了極大的恐慌,老刑警劉巖榴啸,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孽惰,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸥印,警方通過查閱死者的電腦和手機(jī)勋功,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來库说,“玉大人狂鞋,你說我怎么就攤上這事∏钡模” “怎么了骚揍?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長啰挪。 經(jīng)常有香客問我信不,道長,這世上最難降的妖魔是什么亡呵? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任抽活,我火速辦了婚禮,結(jié)果婚禮上锰什,老公的妹妹穿的比我還像新娘下硕。我一直安慰自己丁逝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布梭姓。 她就那樣靜靜地躺著霜幼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪誉尖。 梳的紋絲不亂的頭發(fā)上罪既,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音释牺,去河邊找鬼萝衩。 笑死,一個胖子當(dāng)著我的面吹牛没咙,可吹牛的內(nèi)容都是我干的猩谊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼祭刚,長吁一口氣:“原來是場噩夢啊……” “哼牌捷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涡驮,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤暗甥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捉捅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撤防,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年棒口,在試婚紗的時候發(fā)現(xiàn)自己被綠了寄月。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡无牵,死狀恐怖漾肮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茎毁,我是刑警寧澤克懊,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站七蜘,受9級特大地震影響谭溉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜橡卤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一夜只、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒜魄,春花似錦扔亥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伞鲫,卻和暖如春粘茄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秕脓。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工柒瓣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吠架。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓芙贫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親傍药。 傳聞我的和親對象是個殘疾皇子磺平,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 1,911評論 1 7
  • 經(jīng)過兩天的奮戰(zhàn),終于把xml簡略的過了一遍拐辽。 1.1XML介紹 xml是Extensible Markup lan...
    Ystrator閱讀 814評論 0 2
  • 1. XML總結(jié) 1.1. XML簡介 XML : 可擴(kuò)展的標(biāo)記語言拣挪。(和HTML非常類似的) 可擴(kuò)展的。 自定義...
    Ethan_Walker閱讀 3,019評論 0 12
  • 讀書對孩子們有好處俱诸。
    陳崇先閱讀 70評論 0 0
  • 總有一些莫名其妙的感觸菠劝,不為外人道也,說不出睁搭,寫不出赶诊。我熱愛著寫小說,寫了七年介袜,但是從不寫日記甫何,不寫隨筆。...
    Beautifulpoppie閱讀 126評論 0 0