XML

1.xml簡介

1.extensible Markup Language 可擴(kuò)展標(biāo)記型語言

  • 標(biāo)記型語言:html都是使用標(biāo)簽
  • 可擴(kuò)展型語言 html的標(biāo)簽都是固定的郑气,每個(gè)標(biāo)簽都有特定的含義
    標(biāo)簽可以自己定義 可以寫中文標(biāo)簽
    <person><person/>
  • 2.xml用途
    html是用于顯示數(shù)據(jù)萍嬉,xml也可以顯示數(shù)據(jù)(不是主要功能)
    xml主要功能乌昔,為了存儲(chǔ)數(shù)據(jù)
  • 3.xml是w3c組織發(fā)布的技術(shù)
  • 4.xml有兩個(gè)版本 1.0 1.1

2.xml應(yīng)用

  • 不同的系統(tǒng)之間傳輸數(shù)據(jù)


    數(shù)據(jù)傳輸?shù)母袷绞褂脁ml.jpg
  • 用于表示生活中有關(guān)系的數(shù)據(jù)

  • 經(jīng)常用在配置文件
    如果要修改數(shù)據(jù)庫信息,不需要修改源代碼壤追,只需要修改配置文件就可以了

3.xml的語法

1.xml的文檔聲明

  • 創(chuàng)建一個(gè)文件后綴名為.xml
  • 如果寫 xml磕道,必須要有一個(gè)文檔聲明
   <?xml version="1.0"  encoding="utf-8"?>

文檔聲明必須寫在第一行第一列

  • 屬性
    version xml 的 版本 1.0
    encoding xml 編碼 gbk utf-8
    standalone 是否需要依賴其他文件
    yes/no (不常用)
    2.定義元素(標(biāo)簽)

  • 標(biāo)簽定義必須有開始,有結(jié)束

  • 標(biāo)簽沒有內(nèi)容行冰,可以在標(biāo)簽內(nèi)結(jié)束 例如: <abc/>

  • 標(biāo)簽可以嵌套,必須要合理嵌套

  • 一個(gè) xml中只有一個(gè)根標(biāo)簽溺蕉,其他標(biāo)簽都是都是這個(gè)標(biāo)簽下面的標(biāo)簽

  • xml 中把空格和換行都當(dāng)成內(nèi)容來解析

下面兩段代碼的含義是不相同的

<bb>11111</bb>

<bb>
     11111
</bb>
  • xml 的命名規(guī)則
  • 區(qū)分大小寫
  • 不能以數(shù)字伶丐,下劃線開頭
  • 不能以 xml XML Xml 開頭
    <xmla>,<XMLb> 這些都不正確
  • 不能包含空格和冒號(hào)
    3.定義屬性
  • 一個(gè)標(biāo)簽上可以有多個(gè)屬性
<persion id1='aaa' id2='bbb'> </persion>
  • 屬性名稱不能相同
<persion id1='aaa' id1='bbb'> </persion>

錯(cuò)誤,不能有兩個(gè)id1

  • 屬性名稱與屬性值之間要用=“屬性值”(引號(hào)可為單引號(hào)或者雙引號(hào))
  • xml 屬性的名稱規(guī)范和標(biāo)簽的屬性規(guī)范一致
    4.注釋
<!--  -->
  • 注釋不能嵌套
  • 注釋不能放在第一行疯特,第一行必須放文檔聲明
    5.特殊字符


    轉(zhuǎn)義字符.jpg

    6.CDATA區(qū)

  • 可以解決有多個(gè)字符都需要轉(zhuǎn)義的操作 if(a<b && b<c && d>f) {}
  • 把這些內(nèi)容放到CDATA區(qū)里面哗魂,不需要轉(zhuǎn)義
    寫法
<! [ CDATA [ 內(nèi)容 ] ] >

把特殊字符當(dāng)成文本顯示
7.PI指令(處理指令)

  • 可以在xml中設(shè)置樣式
    寫法
<?xml-stylesheet type="text/css" href="name.css"?>
  • 設(shè)置樣式只能對(duì)英文標(biāo)簽起作用,對(duì)中文標(biāo)簽不起作用漓雅。


    PI處理指令.jpg

8.xml語法的總結(jié)

  • 所有xml元素都必須有關(guān)閉標(biāo)簽
  • xml標(biāo)簽對(duì)大小寫敏感
  • xml必須正確的嵌套順序
  • xml文檔必須有跟元素
  • xml的屬性必須加引號(hào)
  • 特殊字符必須轉(zhuǎn)義——CDATA
  • xml 中的空格录别,回車換行會(huì)解析是被包留

2.xml的約束

  • 為什么需要約束?
    比如現(xiàn)在定義一個(gè)person的xml文件邻吞,只要這個(gè)文件里保存人的信息组题,比如name,age等抱冷,但是如果在xml文件中寫了一個(gè)標(biāo)簽<貓><貓/>崔列,發(fā)現(xiàn)可以正常顯示,因?yàn)榉险Z法規(guī)范但是貓肯定不是人的信息旺遮,xml的標(biāo)簽是自定義的需要字?jǐn)?shù)來規(guī)定
  • xml的約束技術(shù)
    DTD約束與schema約束
    1.DTD快速入門
    創(chuàng)建一個(gè)文件 后綴名 .dtd
    步驟
  • 1.看xml中有多少個(gè)元素峻呕,在dtd文件中寫幾個(gè)<!ELEMENT>
  • 2.判斷元素是簡單元素還是復(fù)雜元素
    -簡單元素:沒有子元素
    <!ELEMENT 元素名稱(#PCDATA)>
    -復(fù)雜元素:有子元素的元素
    <!ELEMENT 元素名稱(元素名稱)>
  • 3.需要在xml文件中引入DTD文件
    <!DOCTYPE 根元素名稱 SYSTEM "DTD文件路徑">
    DTD快速入門.jpg

    打開xml文件使用瀏覽器打開,瀏覽器只負(fù)責(zé)校驗(yàn)xml的語法趣效,不負(fù)責(zé)校驗(yàn)約束
    如果想要校驗(yàn)xml的約束,需要實(shí)用工具(myeclipse工具)
    創(chuàng)建一個(gè)項(xiàng)目 day05
    在day05的目錄下創(chuàng)建一個(gè)xml文件和dtd文件
    在xml中引入dtd文件之后多寫一個(gè)標(biāo)簽之后多寫了一個(gè)a猪贪,會(huì)提示出錯(cuò)
    dtd.jpg
xml.jpg

DTD的三種引入方式

  • 1引入外部dtd文件
<!DOCTYPE 根元素名稱 SYSTEM "DTD文件路徑">
  • 2.使用內(nèi)部的DTD文件


    使用內(nèi)部DTD文件.jpg
  • 3.使用網(wǎng)絡(luò)的DTD文件
<!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文檔的UPL">

-后面學(xué)到框架 struts2 使用配置文件 使用外部dtd

使用DTD定義元素

語法

<!ELEMENT 元素名 約束>
  • 簡單元素 沒有子元素的元素
<!ELEMENT 元素名稱(#PCDATA)>

(#PCDATA):約束name是字符串類型
EMPTY:元素為空(沒有內(nèi)容)

EMPTY.jpg

ANY:元素可以任意

  • 復(fù)雜元素:
<!ELEMENT person (name,age,sex,school)>

-子元素只能出現(xiàn)一次
<!ELEMENT 元素名稱 (子元素)>

<!ELEMENT person (name+,age?,sex*,school)>

+:表示1次或者多次
?:表示出現(xiàn)0次或者1次
*:表示0次或者多次
子元素直接使用逗號(hào)隔開:順序不可顛倒
子元素直接使用豎線隔開:只能出現(xiàn)子元素中其中一個(gè)


元素(ELEMENT)定義.jpg

使用DTD定義屬性

語法
<!ATTLIST 元素名稱
屬性名稱 屬性類型 屬性的約束>

  • 屬性類型
    -CDATA 字符串類型
<!ATTLIST brith
    ID1 CDATA #REQUIRED>

-枚舉:只能在一定范圍內(nèi)出現(xiàn)值跷敬,但是只能每次出現(xiàn)一種值
紅路燈的效果
(aa|bb|cc)

<!ATTLIST age 
ID2 (AA|BB|CC) #REQUIRED>

-ID:值只能是字母或者下劃線開頭

<!ATTLIST name
ID3 ID #REQUIRED>
  • 屬性的約束
    #REQUIRED:屬性必須要有
    #IMPLIED:屬性可有可無
    #FIXED:表示一個(gè)固定的值 #FIXED "ABC"
<!ATTLIST sex 
ID4 CDATA #FIXED "XBW">

-直接值
不寫屬性,使用直接值
寫屬性热押,使用寫的屬性值

<!ATTLIST school
ID5 CDATA "WWW">

實(shí)體的定義

語法

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

使用實(shí)體:&實(shí)體名稱;
注意:一般寫在外部dtd文件內(nèi)

實(shí)例

TV.DTD.jpg

TV.XML.jpg

xml解析簡介(寫到j(luò)ava代碼)****

  • xml標(biāo)記型文檔
  • js使用dom解析標(biāo)記文檔
    -根據(jù)html的層級(jí)結(jié)構(gòu)西傀,在內(nèi)容中分配一個(gè)書型結(jié)構(gòu),把html的標(biāo)簽桶癣,屬性和文本都封裝成對(duì)象
    -doucoment element 屬性對(duì)象 文本對(duì)象 屬性和文本都封裝成對(duì)象
  • xml的解析方式(技術(shù)):dom 和 sax
    dom和sax解析xml文件.jpg
  • dom方式解析
    -根據(jù)xml的層級(jí)結(jié)構(gòu)在內(nèi)容中分配一個(gè)樹形結(jié)構(gòu)拥褂,把xml的標(biāo)簽,屬性和文本都封裝成對(duì)象
    -缺點(diǎn):內(nèi)容過大造成內(nèi)存溢出
    -優(yōu)點(diǎn):很方便實(shí)現(xiàn)增刪改操作
  • sax方式解析:
    -采用事件驅(qū)動(dòng)牙寞,邊讀邊解析
    從上到下饺鹃,一步一步解析,解析到某一個(gè)對(duì)象间雀,返回對(duì)象名
    -缺點(diǎn):不能實(shí)現(xiàn)增刪改操作
    -優(yōu)點(diǎn):如果文件過大悔详,不會(huì)造成內(nèi)存溢出,方便實(shí)現(xiàn)查詢操作

jaxp的dpi的查看

jaxp是javase的一部分

  • jaxp解析器在jdk的javax.xml.parse包里面
    四個(gè)類:分別是針對(duì) dom和 sax 解析使用的類
  • dom:
    documentBuilder:解析器類

1.這個(gè)類是一個(gè)抽象類惹挟,不能 new
此類的實(shí)例可以從 DocumentBuilderFactory.newDocumentBuilder()方法獲取

2.一個(gè)方法茄螃,可以解析 xml parse(“xml 路徑”)返回是 Document 整個(gè)文檔

3.返回的 document 是一個(gè)接口,父節(jié)點(diǎn)是 Node 连锯,如果在 document里面找不到想要的方法归苍,到 Node 里面去找

4.在document里面方法

getElementsByTagName(String tagname)

——這個(gè)方法可以得到標(biāo)簽
返回集合NodeList

createElements(String tagname)

——?jiǎng)?chuàng)建標(biāo)簽

createTextNode(String data)
——?jiǎng)?chuàng)建文本
appendChild(Node oldchild)
——把文本添加到標(biāo)簽下面
removechild(Node oldchild)
——?jiǎng)h除節(jié)點(diǎn)
getparentNode()

——獲取父節(jié)點(diǎn)

NodeList
getLength()得到集合的長度
item (int index)下標(biāo)取到具體的值
遍歷:

for(int i=0;i<list.getLength();i++){
list.item(i);
}

DocumentBuilderFactory:解析器工廠
——這個(gè)類也是一個(gè)抽象類用狱,不能 new
newInstance () 獲取 DocumentBuildertory 的實(shí)例。

sax :
SAXParser:解析器類
SAXParserFactory:解析器工廠

使用jaxp查詢所有name元素的值

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

DocumentBuilderFactory buliderFactory = DocumentBuilderFactory.newInstance();

2.根據(jù)解析器工廠解析解析器

DocumentBuilder builder = builderFactory.newDocumentBilder();

3.解析xml返回document

Document document = bulider.parse("src/person.xml");

4.得到所有的name元素

NodeList list = document.getElementsByTagName("name");

5.遍歷集合得到每一個(gè)那么元素

    for(int i = 0;i<list.getLength();i++){
            Node name1 = list.item(i);
            String s = name1.getTextContent();
            System.out.println(s);
        }

使用 jaxp 添加節(jié)點(diǎn)

在第一個(gè) p1 下面(末尾) 添加<sex>nv</sex>
步驟:

1.創(chuàng)建解析器工廠
2.根據(jù)解析器工廠創(chuàng)建解析器
3.解析 xml 拼弃,返回 document
4.得到第一個(gè) p1
——得到所有 p1 夏伊,使用 item 方法下標(biāo)得到
5.創(chuàng)建 sex 標(biāo)簽 createTextNode
6.創(chuàng)建文本 createTextNode
7.把文本添加到 sex 下面 appendChild
8.把 sex 添加到第一個(gè) p1 下面 appendChild
9.回寫 xml

使用 jaxp 修改節(jié)點(diǎn)

修改 第一個(gè) p1 下面的sex內(nèi)容是nan
步驟:

1.創(chuàng)建解析器工廠
2.根據(jù)解析器工廠創(chuàng)建解析器
3.解析 xml ,返回 document
4.得到 sex item 方法
5.修改sex里面的值 ——setTextContent方法
6.回寫 xml

//回寫 xml
TransformerFactory transformerFactory=TransformerFactory .newInstance();
Tranaformer transformer=transformerFactory.new Transformer();
transformer .transform(new DOMSource(document),new StreamResult("src/person.xml");

使用 jaxp 刪除節(jié)點(diǎn)

刪除 <sex>nan</sex>節(jié)點(diǎn)
步驟:

1.創(chuàng)建解析器工廠
2.根據(jù)解析器工廠創(chuàng)建解析器
3.解析 xml 肴敛,返回 document

獲取 sex 元素
5.獲取 sex 的父節(jié)點(diǎn) 使用 getParentNode 方法
6.刪除使用父節(jié)點(diǎn) removechild 方法
7.回寫 xml

使用 jaxp 遍歷節(jié)點(diǎn)

步驟:

1.創(chuàng)建解析器工廠
2.根據(jù)解析器工廠創(chuàng)建解析器
3.解析 xml 署海,返回 document
4.得到根節(jié)點(diǎn)
5.得到根節(jié)點(diǎn)子節(jié)點(diǎn)
6.得到根節(jié)點(diǎn)子節(jié)點(diǎn)的子節(jié)點(diǎn)
遍歷的方法:

private static void list1(Node node){
//判斷是元素類型的時(shí)候才打印
if(node.getNodeType()==Node,ELEMENT_NODE){
System.out.println(node.getNodeName());
}
//得到一層子節(jié)點(diǎn)
NodeList list =node.getChildNodes();
//遍歷 list
for(int i=0;i<list.getLength();i++)
//得到某一個(gè)節(jié)點(diǎn)
Node node1 =list.item(i)医男;
//node1.getChildNodes()
list1(node1)砸狞;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市镀梭,隨后出現(xiàn)的幾起案子刀森,更是在濱河造成了極大的恐慌,老刑警劉巖报账,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件研底,死亡現(xiàn)場離奇詭異,居然都是意外死亡透罢,警方通過查閱死者的電腦和手機(jī)榜晦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羽圃,“玉大人乾胶,你說我怎么就攤上這事⌒嗄” “怎么了识窿?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脑融。 經(jīng)常有香客問我喻频,道長,這世上最難降的妖魔是什么肘迎? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任甥温,我火速辦了婚禮,結(jié)果婚禮上妓布,老公的妹妹穿的比我還像新娘窿侈。我一直安慰自己,他們只是感情好秋茫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布史简。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪圆兵。 梳的紋絲不亂的頭發(fā)上跺讯,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音殉农,去河邊找鬼刀脏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛超凳,可吹牛的內(nèi)容都是我干的愈污。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼轮傍,長吁一口氣:“原來是場噩夢啊……” “哼暂雹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起创夜,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤杭跪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后驰吓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涧尿,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年檬贰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姑廉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翁涤,死狀恐怖桥言,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迷雪,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布虫蝶,位于F島的核電站章咧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏能真。R本人自食惡果不足惜赁严,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粉铐。 院中可真熱鬧疼约,春花似錦、人聲如沸蝙泼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汤踏。三九已至织鲸,卻和暖如春舔腾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搂擦。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國打工稳诚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瀑踢。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓扳还,卻偏偏與公主長得像,于是被迫代替她去往敵國和親橱夭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氨距,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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

  • 經(jīng)過兩天的奮戰(zhàn),終于把xml簡略的過了一遍徘钥。 1.1XML介紹 xml是Extensible Markup lan...
    Ystrator閱讀 809評(píng)論 0 2
  • 一呈础、XML介紹 XML 指可擴(kuò)展標(biāo)記語言(EXtensible Markup Language),也是一種標(biāo)記語言...
    圣賢與無賴閱讀 1,114評(píng)論 2 3
  • 課程內(nèi)容:XML 安裝MyEclipse開發(fā)工具 * 破解(看圖) * 配置 * 配置工作空間的編碼(UTF-...
    流年劃破容顏_cc55閱讀 1,182評(píng)論 0 2
  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識(shí) XML 和...
    WebSSO閱讀 1,907評(píng)論 1 7
  • xml經(jīng)典總結(jié) XML(eXtensible Markup Language)是萬維網(wǎng)聯(lián)盟(World Wide ...
    java日記閱讀 947評(píng)論 0 2