java學習筆記之xml
xml學習筆記
1:xml的概述
1.1 xml是什麽
標記語言:語言中出現了<a></a>的標簽
a:HTML 超文本標記語言 (語法非常嚴格,不能隨意的定義標簽)
b:XML 可擴展的標記語言(用戶可以根據自己的需求,隨意的定義標簽)
<垃圾></垃圾>
開發的組織:w3c 開源精神 HTML XML Java Script
版本:使用 1.0
1.2 xml有什麽用
a:存儲數據
b:作為配置文件
1.3 xml怎麽用
2:xml的語法
2.1 文檔聲明
<?xml version="1.0" encoding="UTF-8"?> encode:編碼 decode:解碼
1) 文檔聲明必須為<?xml開頭,以?>結束;
2) 文檔聲明必須從文檔的0行0列位置開始;
3) 文檔聲明只有2個屬性:
a) versioin:指定XML文檔版本。只會選擇1.0;
b) encoding:指定當前文檔保存時編碼方式。可選屬性,默認值是UTF-8;
2.2 元素(element)
1. 元素是XML文檔中最重要的組成部分, 開始標簽 元素體 結束標簽
2. 普通元素的結構開始標簽、元素體、結束標簽組成。例如:<hello> 大家好 </hello>
3. 元素體:元素體可以是元素,也可以是文本,例如:<b><a>你好</a></b>
4. 空元素:元素沒有元素體,空元素只有開始標簽,而沒有結束標簽,但元素必須自己閉合,例如:<c/>
5. 元素命名:
a) 區分大小寫
b) 不能使用空格,不能使用冒號:
c) 不建議以XML、xml、Xml開頭
6. 格式化良好的XML文檔,必須只有一個根元素。除了根元素,所有元素必須被其他元素包含
2.3 屬性(attribute)
1. 屬性是元素的一部分,它必須出現在元素的開始標簽中
2. 屬性的定義格式:屬性名=屬性值,其中屬性值必須使用單引或雙引
3. 一個元素可以有0~N個屬性,但一個元素中不能出現同名屬性
4. 屬性名不能使用空格、冒號等特殊字符,且必須以字母開頭
屬性和子元素的選擇
a:如果你描述的數據是對元素唯一的標識(id),則應該放在屬性中
b:如果你描述的數據需要進行再次擴展,必須放在子元素中
2.4 註釋
XML的註釋,以“<!--”開始,以“-->”結束。註釋內容會被XML解析器忽略!
a)註釋不能放在文件的第一行
b)註釋的快捷鍵
註釋 :ctrl + shift + /
反註釋 :ctrl + shift + \
2.4 轉義字符
? 轉義字符
因為很多符號已經被XML文檔結構所使用,所以在元素體或屬性值中想使用這些符號就必須使用轉義字符,例如:“<”、“>”、“’”、“””、“&”。
< --> <
> --> >
" --> "
‘ --> '
& --> &
2.5 CDATA區
<![CDATA[
任意內容
]]>
當你的標簽內容有大量的轉義字符時,則可以使用CDATA區,一次性全部轉義
3:xml的約束
xml約束:xml中的標簽默認是可以隨便擴展,這樣就造成了xml的隨意性太大,為了給xml一個統一 的規範,就必須使用xml約束
3.1 DTD約束
DTD(Document Type Definition),文檔類型定義
約束:標簽的名字,標簽的屬性,標簽的順序
我們的任務就是根據已經提供好的DTD約束文檔來定義xml文件
3.2 DTD約束步驟
步驟1:創建bean-dtd.xml文檔,並將“bean.dtd”拷貝相同目錄下
步驟2:從DTD文檔開始處,拷貝需要的“文檔聲明”
步驟3:完成xml內容編寫
3.4 DTD的文檔聲明
1: 內部DTD,在XML文檔內部嵌入DTD,只對當前XML有效。
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE beans [
... //具體的語法
]>
<beans>
</beans>
2: 本地DTD,DTD文檔在本地系統上,公司內部自己項目使用。
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE beans SYSTEM"bean.dtd">
<beans>
</beans>
3: 外部DTD—公共DTD,DTD文檔在網絡上,一般都有框架提供。
需要有網絡,當第一次使用之後,則會在本地緩存。
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD的名字-->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
<!-- DTD的網絡位置-->
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
3.5 元素
<!ELEMENT 元素名 元素描述>
?:可以出現,但只能出現一次
*:允許出現多次,也可以是0次
+:該對象至少出現一次,但可以是多次
,:元素按照指定的順序出現
//------------------------------------------
根元素:beans 而且有兩個子元素:bean(0次或多次) 和import(0次或多次,而且必須按照指定的順序出現
#PCDATA:表示元素體是文本
<!ELEMENT beans (bean*,import*) >
<!ELEMENT bean (property*)>
<!ELEMENT property (#PCDATA)>
<!ELEMENT import (#PCDATA)>
bean有三個屬性:id className type
<!ATTLIST bean id ID #REQUIRED
className CDATA #REQUIRED
type CDATA #IMPLIED
>
<!ATTLIST property name CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ATTLIST import resource CDATA #REQUIRED>
3.2 Schema約束
Schema是新的XML文檔約束;
Schema要比DTD強大很多,是DTD 替代者;
Schema本身也是XML文檔,但Schema文檔的擴展名為xsd,而不是xml。
Schema 功能更強大,數據類型更完善
Schema 支持名稱空間
3.3 約束文檔和XML關系
W3C提出Schema約束規範時,就提供“官方約束文檔”。我們通過官方文檔,必須“自定義schema 約束文檔”,開發中“自定義文檔”由框架編寫者提供。我們提供“自定義文檔”限定,編寫出自己的xml文檔。
3.3 命名空間
默認的命名空間
xmlns="http://www.itcast.cn/bean"
顯式的命名空間
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
使用標簽時,必須加前綴
4:xml解析
就是取出xml存儲的數據(屬性和文本)
<!-- xml文件-->
常用API如下:
1. SaxReader對象
a) read(…) 加載執行xml文檔
2. Document對象
a) getRootElement() 獲得根元素
3. Element對象
a) elements(…) 獲得指定名稱的所有子元素。可以不指定名稱
b) element(…) 獲得指定名稱第一個子元素。可以不指定名稱
c) getName() 獲得當前元素的元素名
d) attributeValue(…) 獲得指定屬性名的屬性值
e) elementText(…) 獲得指定名稱子元素的文本值
f) getText() 獲得當前元素的文本內容
java學習筆記之xml