Java 基礎(chǔ) 52 XML概述與XML文件的編寫

1.1 XML語言的概述

1.1.1 XML介紹

xml語言是具有結(jié)構(gòu)性的標記語言, 可以靈活的存儲一對多的數(shù)據(jù)關(guān)系.

  • 舉例:
graph TD
    A[中國]-->B[北京] 
    A[中國]-->C[山東]
    A[中國]-->D[湖北]
    B-->E[豐臺]
    B-->F[海淀]
    C-->J[濟南]
    C-->H[青島]
    D-->D1[武漢]
    D-->D2[荊州] 

??以上這種數(shù)據(jù), 如果通過我們學習的集合來存儲的話, 需要通過多個集合的嵌套使用.
那么很顯然, 數(shù)據(jù)存儲的過程就非常麻煩, 但是我們今天所學習的xml文件就可以很簡單的存儲這種一對多的數(shù)據(jù)
至于怎樣存儲, 我們稍后會詳細講解, 目前需要掌握的是關(guān)于xml的使用場景

用來存儲一對多的數(shù)據(jù)

另外, xml還有一些其他的應用方面:

??之前學習過properties配置文件, 通過這種配置文件, 可以使代碼的編寫更加靈活.
但是這種配置文件也只能存儲一個鍵值對的映射關(guān)系, 如果需要存儲多個呢?
沒錯, 可以使用xml , 所以xml的另一方面應用就展示出來了

用來當做配置文件存儲數(shù)據(jù)

1.1.2 問題: xml文件是用來做什么的

核心思想:
答:存儲數(shù)據(jù)
延伸問題: xml是怎樣存儲數(shù)據(jù)的呻拌?

答:以標簽的形式存儲  
例:  <name>Jack</name>


1.2 XML的文檔聲明

1.2.1 XML文件的組成部分

  • 文檔聲明
  • 元素
  • 元素的屬性
  • 注釋
  • CDATA區(qū)
  • 特殊字符
  • 處理指令(PI:Processing Instruction):了解

1.2.2 文檔聲明

  • 什么是文檔聲明?
    • 在編寫XML文檔時获枝,需要先使用文檔聲明來聲明XML文檔。且必須出現(xiàn)在文檔的第一行
      這就好比我們在寫java文件的時候需要聲明class一樣, 就是個硬性的規(guī)定.

格式

<?xml version='1.0' encoding='UTF-8'?>

    xml表示標簽的名字
    version表示當前文件的版本號
    encoding表示當前編碼, 需要跟文件的編碼產(chǎn)生對應關(guān)系

    ps: standalone表示標記此文檔是否獨立
        了解即可

1.3 XML的元素

1.3.1 什么是元素? 元素該如何編寫?

  • xml中的元素其實就是一個個的標簽
  • 標簽分為兩種
  • 包含標簽體
    理解: 簡括號全部成對兒出現(xiàn), 所有的數(shù)據(jù)都用一對兒簡括號存儲
  • 舉例
   
<student>
   <name>zhangsan</name>
   <age>18</age>
</student>
   
  • 不包含標簽體
    理解: 只有最外層的一個簡括號,括號用/標識結(jié)束, 內(nèi)部的數(shù)據(jù)都用屬性來編寫
<student name="zhangsan" age="18"/>

??兩種方式都需要掌握, 但是第二種編寫起來會更加方便

1.3.2 標簽(元素的書寫規(guī)范)

  • 嚴格區(qū)分大小寫坦辟;<p><P>
  • 只能以字母或下劃線開頭讼稚;abc _abc
  • 不能以xml(或XML、Xml等)開頭----W3C保留日后使用;
  • 名稱字符之間不能有空格或制表符挂据;
  • 名稱字符之間不能使用冒號 : (有特殊用途)

1.3.3 元素中屬性的注意事項

  • 一個元素可以有多個屬性胖喳,每個屬性都有它自己的名稱和取值泡躯。
  • 屬性值一定要用引號(單引號或雙引號)引起來。
  • 屬性名稱的命名規(guī)范與元素的命名規(guī)范相同
  • 元素中的屬性是不允許重復的
  • 在XML技術(shù)中丽焊,標簽屬性所代表的信息也可以被改成用子元素的形式來描述

舉例

<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student name="zhangsan" age="18" />
    
    
    <student>
        <name>zhangsan</name>
        <age>18</age>
    </student>
</students>

1.4 XML的注釋

1.4.1 格式編寫

格式

<!—被注釋的內(nèi)容 -- >

1.4.2 注意事項

  • 注意: 注釋不能嵌套定義

1.5 引入CDATA區(qū)

1.5.1 概述

  • 為什么要使用CDATA區(qū)域?

    • 如果我們在標簽中寫入的內(nèi)容, 想要帶有標簽的標記符號的話, 就需要對這段內(nèi)容進行轉(zhuǎn)義较剃,就好比java中的打印語句,想要打印出”這個字符就必須用/進行轉(zhuǎn)義.
    • 標簽也是一樣, 想要將<itheima>當做內(nèi)容存儲的話, 就需要對他進行轉(zhuǎn)義.

如何轉(zhuǎn)義?

特殊字符 替代字符
& &amp;
< &lt;
> &gt;
" &quot;
' &apos;

注意:

  • 這種轉(zhuǎn)移可以達到效果, 但是如果操作的數(shù)據(jù)過多, 編寫起來會非常痛苦, 所以, 可以使用CDATA區(qū)來解決此問題

1.5.2 實例代碼

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    如果有一個包含標簽體的標簽技健,
    他的標簽體是一個普通文本写穴,不是子標簽,
    而普通文本中包含了一個標簽雌贱,那這樣可以嗎啊送?
-->

<students>
    <student>
        <name>zhangsan</name>
        <url>
            <![CDATA[
                <itheima>www.itheima.com</itheima>
                <itcast>www.itcast.cn</itcast>
            ]]>
        </url>
    </student>
    
    
    <student>
        <name>zhangsan</name>
        <url>
            &lt;itheima&gt;www.itheima.com&lt;/itheima&gt;
        </url>
    </student>
</students>

1.6 DTD書寫規(guī)范

1.6.1 為什么要有約束 (DTD)?

  • XML都是用戶自定義的標簽,若出現(xiàn)小小的錯誤欣孤,軟件程序?qū)⒉荒苷_地獲取文件中的內(nèi)容而報錯馋没。(如:Tomcat)
  • XML技術(shù)中,可以編寫一個文檔來約束一個XML的書寫規(guī)范降传,這個文檔稱之為約束

1.6.2 DTD約束文件的使用

  • 編寫DTD文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 書架(書+)>
    <!ELEMENT 書 (書名,作者,售價)>
    <!ELEMENT 書名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售價 (#PCDATA)>
  • 在xml文件中引入DTD文件
<!DOCTYPE 書架 SYSTEM "book.dtd">

??引入了寫好的DTD文件后, 格式就必須跟DTD文件保持一致

1.6.3 DTD 語法細節(jié)

在DTD文檔中使用ELEMENT關(guān)鍵字來聲明一個XML元素篷朵。

  • 語法:<!ELEMENT 元素名稱 使用規(guī)則>
    • 使用規(guī)則:
      • (#PCDATA):指示元素的主體內(nèi)容只能是普通的文本.(Parsed Character Data)
      • EMPTY:用于指示元素的主體為空。比如
      • ANY:用于指示元素的主體內(nèi)容為任意類型婆排。
      • (子元素):指示元素中包含的子元素
  • 定義子元素及描述它們的關(guān)系:
    • 如果子元素用逗號分開声旺,說明必須按照聲明順序去編寫XML文檔。
      • 如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)
    • 如果子元素用"|"分開段只,說明任選其一腮猖。
      • 如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)
    • 用+、*翼悴、缚够?來表示元素出現(xiàn)的次數(shù)
      • 如果元素后面沒有+*?:表示必須且只能出現(xiàn)一次
      • +:表示至少出現(xiàn)一次,一次或多次
      • *:表示可有可無鹦赎,零次谍椅、一次或多次
      • ?:表示可以有也可以無,有的話只能有一次古话。零次或一次

1.6.4 DTD 定義屬性

  • 在DTD文檔中使用ATTLIST關(guān)鍵字來為一個元素聲明屬性雏吭。
  • 語法:
    <!ATTLIST 元素名
        屬性名1 屬性值類型 設置說明
        屬性名2 屬性值類型 設置說明
            …
        >
  • 屬性值類型:
    • CDATA:表示屬性的取值為普通的文本字符串
    • ENUMERATED (DTD沒有此關(guān)鍵字):表示枚舉,只能從枚舉列表中任選其一陪踩,如(雞肉|牛肉|豬肉|魚肉)
    • ID:表示屬性的取值不能重復
  • 設置說明
    • REQUIRED:表示該屬性必須出現(xiàn)

    • IMPLIED:表示該屬性可有可無

    • FIXED:表示屬性的取值為一個固定值杖们。語法:#FIXED "固定值"

      • 直接值:表示屬性的取值為該默認值

1.6.5 實例代碼


<!ATTLIST 商品
        類別 CDATA #REQUIRED
        顏色 CDATA #IMPLIED
>
<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
    <商品 類別="服裝"顏色="黃色" />

<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 購物籃 [
   <!ELEMENT 購物籃 (肉+)>
    <!ELEMENT 肉 EMPTY>
    <!ATTLIST 肉 品種 ( 雞肉 | 牛肉 | 豬肉 | 魚肉 ) "雞肉">
]> 
<購物籃>
    <肉 品種="魚肉"/>
    <肉 品種="牛肉"/>
    <肉/>
</購物籃>

1.7 Schema的概述

1.7.1 Schema

??Schema約束自身就是一個XML文件悉抵,但它的擴展名通常為.xsd

??一個XML Schema文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實例文檔摘完。
??XML Schema對名稱空間支持得非常好

  • 理解:
    名稱空間: 相當于package
  • 約束文檔: 編寫好的Person類
    實例文檔: 通過Person類創(chuàng)建對象

1.7.2 Schema入門案例

約束文檔:

<?xml version='1.0' encoding='UTF-8' ?> 
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' 
                     //標準的名稱空間
                      targetNamespace='http://www.itheima.com'
                        //將該schema文檔綁定到http://www.itheima.com名稱空間
                >
    <xs:element name='書架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='書' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='書名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售價' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

實例文檔:
<?xml version="1.0" encoding="UTF-8"?>
<itheima:書架 xmlns:itheima="http://www.itheima.com"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.itheima.com book.xsd">
    <itheima:書>
        <itheima:書名>JavaScript網(wǎng)頁開發(fā)</itheima:書名>
        <itheima:作者>張孝祥</itheima:作者>
        <itheima:售價>28.00元</itheima:售價>
    </itheima:書>
</itheima:書架>


名稱空間:
<itheima:書架 xmlns:itheima="http://www.itheima.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itheima.com book.xsd">

1.7.3 使用默認名稱空間

?基本格式:
    xmlns="URI"  
?舉例:
    <書架 xmlns="http://www.it315.org/xmlbook/schema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.it315.org/xmlbook/schema book.xsd">
        <書>
        <書名>JavaScript網(wǎng)頁開發(fā)</書名>
        <作者>張孝祥</作者>
        <售價>28.00元</售價>
        </書>
    <書架>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姥饰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子孝治,更是在濱河造成了極大的恐慌列粪,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谈飒,死亡現(xiàn)場離奇詭異岂座,居然都是意外死亡,警方通過查閱死者的電腦和手機杭措,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門费什,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人手素,你說我怎么就攤上這事鸳址。” “怎么了刑桑?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵氯质,是天一觀的道長。 經(jīng)常有香客問我祠斧,道長闻察,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任琢锋,我火速辦了婚禮辕漂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吴超。我一直安慰自己钉嘹,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布鲸阻。 她就那樣靜靜地躺著跋涣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸟悴。 梳的紋絲不亂的頭發(fā)上陈辱,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音细诸,去河邊找鬼沛贪。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的利赋。 我是一名探鬼主播水评,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼媚送!你這毒婦竟也來了中燥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤季希,失蹤者是張志新(化名)和其女友劉穎褪那,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體式塌,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年友浸,在試婚紗的時候發(fā)現(xiàn)自己被綠了峰尝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡收恢,死狀恐怖武学,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伦意,我是刑警寧澤火窒,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站驮肉,受9級特大地震影響熏矿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜离钝,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一票编、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卵渴,春花似錦慧域、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碘橘,卻和暖如春互订,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛹屿。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工屁奏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人错负。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓坟瓢,卻偏偏與公主長得像勇边,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子折联,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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

  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 1,926評論 1 7
  • 經(jīng)過兩天的奮戰(zhàn)粒褒,終于把xml簡略的過了一遍。 1.1XML介紹 xml是Extensible Markup lan...
    Ystrator閱讀 823評論 0 2
  • 一诚镰、XML的概述 XML的全名為可擴展標記語言(Extensible Markup Language),XML的作...
    java部落閱讀 350評論 0 1
  • 花兒9887閱讀 177評論 0 0
  • 韓劇里慣用初雪渲染戀愛的甜蜜溫馨清笨,的確也打動了像我這樣的少女心爆棚的女孩子月杉,期盼過初雪那天,我們在一起吧抠艾。 ...
    橘子少女啊閱讀 686評論 0 5