JAVA基礎-XML的解析(一)

一、XML的概述

XML的全名為可擴展標記語言(Extensible Markup Language),XML的作用為:1、傳輸,2、存取數(shù)據(jù),3、軟件的配置文件。傳輸現(xiàn)在都用更輕量的Json,而存儲則用數(shù)據(jù)庫。所以軟件的配置文件是現(xiàn)在的XML的主要用途?,F(xiàn)在的一些主流框架都是使用XML進項配置的。

(一)XML的基本語法

1、XML的文檔聲明:通常出現(xiàn)在XML的第一行第一列的位置!
寫法:
    <?xml 屬性名=”屬性值” 屬性名=”屬性值” ...?>
    * version :必須的. 使用”1.0”
    * encoding :字符集. 是使用瀏覽器打開的時候采用的默認的字符集的編碼.
    * standalone :描述XML文檔是否需要依賴其他的文件.
舉例:<?xml version="1.0" encoding="UTF-8"?>
  2、XML的注釋
寫法:
    
  3、XML的元素:xml中的元素其實就是一個個的標簽 - a: 包含標簽體(<>成對兒出現(xiàn)),b: 不包含標簽體
(<元素名 屬性/>)
舉例:
a:

1 <student>
2    <name>zhangsan</name>
3    <age>18</age>
4 </student>

b:

1  <student
2     name="zhangsan"
3     age="18"
4 />

元素的命名規(guī)范:
    * 嚴格區(qū)分大小寫;<a><A>
    * 只能以字母或下劃線開頭;abc _abc
    * 不能以xml(或XML、Xml等)開頭;
    * 名稱字符之間不能有空格或制表符;
    * 名稱字符之間不能使用冒號;
  4、XML元素中的屬性:一個元素可以有多個屬性,每個屬性都有它自己的名稱和取值。
寫法:
    * 屬性值一定要用引號(單引號或雙引號)引起來。
    * 屬性名稱的命名規(guī)范與元素的命名規(guī)范相同
    * 元素中的屬性是不允許重復的
  5、XML的特殊字符和CDATA區(qū)
特殊字符:



CDATA區(qū)的寫法:   
 <![CDATA[ 內(nèi)容 ]]>

二、XML的約束

在XML中都是用戶自定義的標簽,若出現(xiàn)小小的錯誤,軟件程序?qū)⒉荒苷_地獲取文件中的內(nèi)容而報錯。
(如:Tomcat),所以就可以編寫一個文檔來約束一個XML的書寫規(guī)范,這個文檔稱之為約束。XML的約束就是
用來約束XML的文檔中可以出現(xiàn)哪些標簽,不能出現(xiàn)哪些標簽,標簽中是否有順序,出現(xiàn)的次數(shù)。XML的約束
包括2種:1、DTD,2、Schema。
兩者的區(qū)別:
    * 語法的不同,DTD的語法自成一體而Schema的語法則和XML類似。
    * Schema具有命名空間
    * Schema具有更強強的語義和約束
    * Schema能夠更好地被解析器解析

(一)DTD約束

1、DTD中定義元素:在DTD文檔中使用ELEMENT關鍵字來聲明一個XML元素。
語法:
    <!ELEMENT 元素名稱 使用規(guī)則>
元素的一些約束規(guī)則:
    * (#PCDATA):指示元素的主體內(nèi)容只能是普通的文本.(Parsed Character Data)
    * EMPTY:用于指示元素的主體為空。比如

    * ANY:用于指示元素的主體內(nèi)容為任意類型。
    * (子元素):指示元素中包含的子元素
    * 如果子元素用逗號分開,說明必須按照聲明順序去編寫XML文檔
    * 如果子元素用"|"分開,說明任選其一。
    * 用+(至少一次)、
      (可有可無,零次、一次或多次)、
      ?(可以有也可以無,有的話只能有一次。零次或一次)來表示元素出現(xiàn)的次數(shù)
  2、DTD中定義屬性:在DTD文檔中使用ATTLIST關鍵字來為一個元素聲明屬性。
寫法:
    <!ATTLIST 元素名
    屬性名1 屬性值類型 設置說明
    屬性名2 屬性值類型 設置說明
    ......
    >
屬性的類型和約束:
    
CDATA:表示屬性的取值為普通的文本字符串
    * ENUMERATED (DTD沒有此關鍵字):表示枚舉,只能從枚舉列表中任選其一
    * ID:表示屬性的取值不能重復
    * #REQUIRED:表示該屬性必須出現(xiàn)
    * #IMPLIED:表示該屬性可有可無
    * #FIXED:表示屬性的取值為一個固定值。語法:#FIXED "固定值"
例子:

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--根元素有且只能有一個 -->
3 <!ELEMENT 例子 (數(shù)+)>
4 <!ELEMENT 數(shù) (1,2,3,4)>
5 <!ELEMENT 1 (#PCDATA)>
6 <!ELEMENT 2 (#PCDATA)>
7 <!ELEMENT 3 (#PCDATA)>
8 <!ELEMENT 4 (#PCDATA)>

3、DTD的引用方式

  • 內(nèi)部引用DTD:
        <!DOCTYPE persons [

]>

  • 外部引用DTD:
      * 本地DTD:
        <!DOCTYPE persons SYSTEM ".dtd">
      
    網(wǎng)絡DTD:
        <!DOCTYPE persons PUBLIC "url" "
    *.dtd">

(二)Schema約束

一個XML Schema文檔通常稱之為模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之為實例文檔。
Schema約束自身就是一個XML文件,但它的擴展名通常為.xsd。Schema支持名稱空間。名稱空間:可以理
解為JAVA里的package,約束文檔:可以理解為一個JAVABean類,實例文檔:就是通過JAVABean類創(chuàng)建的實
例對象。
  可以通過命名空間來分辨出約束文檔
舉例:
  *Schema文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.xmldemo.com"
 3 elementFormDefault="qualified">
 4 <element name="persons">
 5 <!-- 復雜元素 -->
 6 <complexType>
 7 <!-- 有序的,最大值不限定,最小值為一 -->
 8 <sequence maxOccurs="unbounded" minOccurs="1">
 9 <element name="person">
10 <complexType>
11 <sequence>
12 <!-- 簡單表簽 -->
13 <element name="name" type="string"></element>
14 <element name="age" type="int"></element>
15 <element name="sex" type="string"></element>
16 </sequence>
17 <!-- 屬性,在有序和復雜元素之間 -->
18 <attribute name="id" type="int" />
19 </complexType>
20 </element>
21 </sequence>
22 </complexType>
23 </element>
24 </schema>

*實例文檔

1 <?xml version="1.0" encoding="UTF-8"?>
2 <p:persons xmlns:p="http://www.xmldemo.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://www.xmldemo.com schame.xsd ">
4 <p:person>
5 <p:name>p:name</p:name>
6 <p:age>0</p:age>
7 <p:sex>p:sex</p:sex>
8 </p:person>
9 </p:persons>

寫的好約束文件可以使用eclipse自動引入:

1、

2、

歡迎加入學習交流群569772982,大家一起學習交流。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1. XML簡介 以下內(nèi)容來自于http://www.w3school.com.cn/xml 基本知識 XML 和...
    WebSSO閱讀 2,092評論 1 7
  • 經(jīng)過兩天的奮戰(zhàn),終于把xml簡略的過了一遍。 1.1XML介紹 xml是Extensible Markup lan...
    Ystrator閱讀 1,035評論 0 2
  • 1. XML總結 1.1. XML簡介 XML : 可擴展的標記語言。(和HTML非常類似的) 可擴展的。 自定義...
    Ethan_Walker閱讀 3,378評論 0 12
  • 這是昨天下午在圖書館心血來潮提筆寫下的一些文字,我不稱它為一篇文章,因為我沒有表達出什么主題,就只是寫寫字而已。昨...
    靜好_閱讀 630評論 1 3
  • 即興寫的一番文字,被我誤刪除后,此刻筆下再難現(xiàn)彼時的靈氣和意氣。 上周大咖讀書會是東野圭吾系列周,為配合第二天的作...
    游歷天地間一逍遙客閱讀 471評論 0 1

友情鏈接更多精彩內(nèi)容