http://www.cnblogs.com/wang-meng/p/5374498.htmlhtml
1,XML基礎介紹
xml的概念:
XML 指可擴展標記語言(EXtensible Markup Language),也是一種標記語言,很相似 HTML。
它的設計宗旨是傳輸數據,而非顯示數據它;標籤沒有被預約義,須要自行定義標籤。
xml的做用:
XML 是各類應用程序之間進行數據傳輸的最經常使用的工具,而且在信息存儲和描述領域變得愈來愈流行。簡單的說,咱們在開發中使用XML主要有如下兩方面應用.
a.XML作爲數據交換的載體,用於數據的存儲與傳輸
b.XML作爲配置文件java
2,書寫規範spring
注意事項:dom
xml必須有根元素(只有一個) xml標籤必須有關閉標籤 xml標籤對大小寫敏感 xml的屬性值須加引號 特殊字符必須轉義 xml中的標籤名不能有空格,不能以數字或"_" (下劃線)開頭, 不能以xml(或XML、或Xml 等)開頭,名稱中間不能包含冒號(:) (有特殊用途) 空格/回車/製表符在xml中都是文本節點 xml必須正確地嵌套
3.xml的約束ide
xml的約束: 做用:明確的告訴咱們那些元素和屬性能夠寫,以及他們的順序如何. 分類:DTD約束和SCHEMA約束 要求:給你xml約束你能夠寫出對應的xml文檔便可. 1, DTD約束:struts hibernate中有使用 與xml文檔的關聯:
方式1:內部關聯 格式:<!DOCTYPE 根元素名稱 [dtd的語法]> 方式2:外部關聯--系統關聯 格式:<!DOCTYPE 根元素名稱 SYSTEM "dtd路徑"> dtd的後綴名是 .dtd 方式3:外部關聯--公共關聯 格式:<!DOCTYPE 根元素名稱 PUBLIC "dtd的名稱" "dtd路徑"> 元素: 格式1:<!ELEMENT 元素的名稱 (內容)> 格式2:<!ELEMENT 元素的名稱 類別> 屬性: 格式:<!ATTLIST 元素的名稱 屬性的名稱 類型 默認值> 屬性的類型: ID:惟一 CDATA:文本 默認值: REQUIRED:必須出現 IMPLIED:能夠選擇 類別: #PCDATA:文本是一個字符串,不能出現子元素 ,用的時候用(#PCDATA) 符號: + >=1 ? 0|1 * 任意值 | 選擇 () 分組 , 順序
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE bookstore[ <!ELEMENT bookstore (book+)> <!ELEMENT book (title,author,year,price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST book category CDATA #REQUIRED> <!ATTLIST title lang CDATA #IMPLIED> ]> <bookstore> <book category="COOKING" > <title lang="en" >Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
2,SCHEMA約束:spring中使用的就是schema約束
做用:用來替代dtd的,多個schema能夠出現一個xml文檔上
需求:
xml 文檔中出現了<table>
a約束上的---table :桌子 屬性 height width
b約束上的---table :表格 屬性 rows cols
名稱空間:
做用:用來肯定標籤的約束來自於那個約束文檔上
格式:
方式1:xmlns="名稱"
方式2:xmlns:別名="名稱"
例如:
table 表明的是桌子
b:table 表明的就是表格
schema的語法:
後綴名.xsd
關聯工具
1.約束文件的關聯 bookstore.xsd xmlns="http://www.w3.org/2001/XMLSchema"-- 固定值,自定義的約束文件能夠出現那些標籤 targetNamespace="http://www.example.org/bookstore" 給當前的xsd起個名稱空間,方便目標xml文件引用,名字能夠隨便起,通常使用域名/自定義名稱既能夠 例如: targetNamespace="bookstore" targetNamespace="http://www.augmentum.com/bookstore" 肯定一個目標xml根元素 <element name="bookstore"></element> 2.xml文件的關聯 寫根標籤 添加schema約束 1.xmlns="約束的名稱空間" -- 值爲xsd文件上的targetNamespace的內容 例如: xmlns=="http://www.augmentum.com/bookstore" 2.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" :固定的寫法 聲明此文檔是一個 被schema約束的文件 3.肯定文檔的位置 xsi:schemaLocation="{和xsd文件中的targetNamespace} {xsd文件的路徑}" 關聯小結: 先有約束文件. .xsd targetNamespace 就是給當前的約束文件起個名字,方便xml使用 必須肯定根元素 後有xml文件. 寫根元素 添加約束 xmlns="名字" 他的值爲targetNamespace中起的名稱 xsi:schemaLocation="名字 位置" 語法: 1.肯定根元素 <element name > name:元素的名稱 type:元素的數據類型 2.肯定元素類型 複雜的元素 <complexType> 簡單的元素 -- 幾乎看不見 <simpleType> 3.肯定順序: <sequence maxOccurs="3"> 按次序 至關於 dtd 中, <all> 隨意 <choice> 或 至關於dtd中的 | maxOccurs 最大的出現次數 值爲unbounded指的是無上限 minOccurs 最小的出現次數 4.肯定屬性 <attribute name="category" type="string" use="required" /> name :屬性的名稱 type:屬性的數據類型 use 至關於dtd中 默認值 值爲required:必須出現 值爲optional:可選 5.如有屬性的元素,內容只是文本 <complexType> --- 指定元素爲複雜類型 <simpleContent>--- 指定元素是一個簡單的內容,只有文本 <extension base="string"> -- 文本內容進行擴展 <attribute name="lang" type="string" /> -- 添加屬性 </extension> </simpleContent> </complexType>
Schema約束示例:性能
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="aaa" xmlns:tns="http://www.example.org/bookstore" elementFormDefault="qualified"> <element name="bookstore" > <!-- 1.肯定根元素 <element name > name:元素的名稱 type:元素的數據類型 2.肯定元素類型 複雜的元素 <complexType> 簡單的元素 -- 幾乎看不見 <simpleType> 3.肯定順序: <sequence maxOccurs="3"> 按次序 至關於 dtd 中, <all> 隨意 <choice> 或 至關於dtd中的 | maxOccurs 最大的出現次數 值爲unbounded指的是無上限 minOccurs 最小的出現次數 4.肯定屬性 <attribute name="category" type="string" use="required" /> name :屬性的名稱 type:屬性的數據類型 use 至關於dtd中 默認值 值爲required:必須出現 值爲optional:可選 --> <complexType> <sequence maxOccurs="unbounded" minOccurs="1"> <element name="book"> <complexType> <sequence> <element name="title"> </element> <element name="author" type="string" /> <element name="year" type="date" /> <element name="price" type="double" /> </sequence> <attribute name="category" type="string" use="optional" /> </complexType> </element> </sequence> </complexType> </element> </schema> bookstore.xsd
<?xml version="1.0" encoding="UTF-8"?> <bookstore xmlns="aaa" xsi:schemaLocation="aaa bookstore.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> </bookstore>
4.解析xml測試
解析xml種類:
解析xml文件,解析xml格式的字符串
獲取xml中的內容
解析方式:SAX ,DOM4J ,JDOM
區別:
sax:逐行的解析,不能增刪改
dom:把整個文檔加載到內存中,翻譯成一棵樹,就能夠進行crud操做ui
JDOM 在性能測試時表現不佳,在測試 10M 文檔時內存溢出。在小文檔狀況下還值得考慮使用 JDOMspa
若是不考慮可移植性,那就採用DOM4J吧! 要求: 會查詢(獲取) DOM4J的解析(只需會查詢操做)