xml(可擴張標誌語言)
xml應用分類
- 應用於客戶需要與不同數據源進行交互
- 應用於將大量運算負荷分佈在客戶端
- 應用於將同一數據以不同的面貌展現給不同的用戶
- 應用與內容與配置管理
xml只用元素和屬性來描述數據,而怒提供數據的顯示方法
xml的基本結構
xml即一個以.xml爲後綴的文件,包括:
- xml聲明
- xml元素描述
<?xml version="1.0" encoding="utf-8" ?>
<books>
<book>
<name>Java</name>
<author>zhang san</author>
</book>
<book>
<name>C#</name>
<author>li si</author>
</book>
</books>
- xml聲明
版本聲明: | <?xml version="1.0"?> |
---|---|
編碼聲明: | <?xml version="1.0" encoding="utf-8" ?> |
獨立聲明: | <?xml version="1.0" encoding="utf-8" standalone="yes"?> |
版本聲明: version : 解析這個xml的時候,使用什麼版本的解析器解析
編碼聲明:encoding : 解析xml中的文字的時候,使用什麼編碼來翻譯(utf-8,gbk,gb2312)
獨立聲明:standalone : no - 該文檔會依賴關聯其他文檔 , yes-- 這是一個獨立的文檔
- xml元素
xml元素命名規則
名稱可以含字母、數字以及其他的字符
名稱不能以數字或者標點符號開始
名稱不能以字符 “xml”(或者 XML、Xml)開始
名稱不能包含空格
可使用任何名稱,無保留的字詞
* 好名稱應具有描述性,能見名知意 - CDATA
由於xml解釋器通常會解釋xml文檔中的所有文本。非法字符【“<”、"&"】而省略號、引號和大於號是合法,但把他們替換爲實體引用是個好習慣
< | < 小於 |
---|---|
> | > 大於 |
& | & 和號 |
&apos | ’ 省略號 |
" | " 引號 |
如不希望文本被解釋器解釋,則可以將文本放在CDATA標誌中
CDATA:以“<![CDATA[” 開始,以 “]]>”結束
<ah> <![CDATA[<a href="http://www.baidu.com">百度一下</a>]]> </ah>
*CDATA的“]]>”結束部分不包含空格或拆行
- xml註釋
<!-- 這裏是註釋內容 -->
xml的註釋,不允許放置在文檔的第一行。 必須在文檔聲明的下面。
DTD與XML Schema
- DTD[Document Type Definition]用來定義xml文檔結構,包括:
元素的定義規則
元素間關係的定義規則
元素可使用的屬性
可使用的實體或符號規則
DTD在xml文檔內聲明
<!DOCTYPE 根元素 [元素聲明]>
帶有 DTD 的 XML 文檔實例
<?xml version="1.0"?>
<!DOCTYPE books [
<!ELEMENT books (book)>
<!ELEMENT book (name,author)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<books>
<book>
<name>Java</name>
<author>zhang san</author>
</book>
</books>
<!ELEMENT books (book)>:books下有隻有一個元素book。 <!ELEMENT book (name,author)>:book下有兩個元素name,author且順序必爲name - author
元素的個數:
+:一個或多個
*:零個或多個
?:零個或一個
屬性的類型定義
CDATA : 屬性是普通文字
ID : 屬性的值必須唯一
<!ELEMENT stu (name , age)> 按照順序來
<!ELEMENT stu (name | age)> 兩個中只能包含一個子元素
PCDATA即被解析的字符數據(parsed character data)。
PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。
CDATA 即字符數據(character data)。
CDATA 是不會被解析器解析的文本。在這些文本中的標籤不會被當作標記來對待,其中的實體也不會被展開。
- XML Schema
XML Schema:
– 定義可出現在文檔中的元素
– 定義可出現在文檔中的屬性
– 定義哪個元素是子元素
– 定義子元素的次序
– 定義子元素的數目
– 定義元素是否爲空,或者是否可包含文本
– 定義元素和屬性的數據類型
– 定義元素和屬性的默認值以及固定值
<?xml version="1.0"?>
<!-- xmlns :xml namespace:命名空間
targetNamespace:目標命名空間
elementFormDefault:元素格式化情況
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/book"
elementFormDefault="qualified">
<element name="book">
<complexType>
<sequence>
<element name="name" type="xs:string"/>
<element name="author" type="xs:string"/>
</sequence>
</complexType>
</element>
</schema>
<?xml version="1.0"?>
<!-- xmlns :xml namespace:命名空間
targetNamespace:目標命名空間
elementFormDefault:元素格式化情況
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/book"
elementFormDefault="qualified">
<element name="books">
<complexType>
<sequence>
<element name="book">
<complexType>
<sequence>
<element name="name" type="xs:string"/>
<element name="author" type="xs:string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
Java解釋xml
- DOM(文檔對象模型)
需要對文件進行修改
需要對文件進行隨機修改 - SAX <事件驅動的>
對大型文件進行處理
只需修改文件夾部分內容,或只需從文件中得到特定信息
想建立自己的對象模型
###Dom4j 基本用法
element.element("book") : 返回該元素下的第一個book元素
element.elements(); 返回該元素下的所有子元素。
-
創建SaxReader對象
-
指定解析的xml
-
獲取根元素。
-
根據根元素獲取子元素或者下面的子孫元素
try { //1. 創建sax讀取對象 SAXReader reader = new SAXReader(); //jdbc -- classloader //2. 指定解析的xml源 Document document = reader.read(new File("src/xml/books.xml")); //3. 得到元素、 //得到根元素 Element rootElement= document.getRootElement(); //獲取根元素下面的子元素 author //rootElement.element("author") //System.out.println(rootElement.element("book").element("author").getText()); //獲取根元素下面的所有子元素 。 book元素 List<Element> elements = rootElement.elements(); //遍歷所有的book元素 for (Element element : elements) { //獲取stu元素下面的name元素 String name = element.element("name").getText(); String age = element.element("author").getText(); System.out.println("name="+name+"==author+"+author); } } catch (Exception e) { e.printStackTrace(); }