schema約束、SAX
schema約束
特點:- schema符合xml的語法,裏面寫的是xml語句,與dtd約束不同,dtd是自成一派
- 一個xml中可以有多個schema,多個schema使用名稱空間區分
- dtd裏面有PCDATA等類型,但是在schema裏面可以支持更多的數據類型,比如年齡只能是整數,schema可以嚴格的規定整數類型
- 但是schema語法更加復雜,還無法代替dtd
快速入門
1、創建一個schema文件,後綴名是.xsd
根節點:<shema>
在schema文件裏面的屬性
xmlns=http://www.w3.org/2001/XMLSchema 表示當前是一個約束文件
targetNameSpace=http://www.itcast.cn/20151111使用schema約束文件,直接通過地址引入約束文件
elementFormDefault=“qualified”
2、步驟
- 看xml中有多少個元素,有幾個就寫幾個<element>
- 看是否是簡單元素或者復雜元素,簡單元素寫在復雜元素的裏面
如 <element name =“person”>
<complexType>
<sequence>
<element name =“name” type=“string”></element>
<element name=“age” type =“ing”></element>
</sequence>
</complexType>
</element>
3、在被約束文件裏面引入約束文件
如<person xmlns:xsi=“http://www.w3.org/2001/XMLSchema” xmlns=“http://www.itcast.cn/20151111” xis:schemaLocation=“http://www.itcast.cn/20151111” 1.xsd>
** xmlns:xsi=“http://www.w3.org/2001/XMLSchema”表示xml是一個被約束文件
** xmlns=“http://www.itcast.cn/20151111”是約束文檔裏面的targetNameSpace
** xis:schemaLocation=“http://www.itcast.cn/20151111” 1.xsd
格式:targetNamespace 空格 約束文檔的路徑
<sequence>:表示元素按照順序出現
<all>:表示元素只能出現一次
<choice>:表示元素只能出現其中一個
maxOccurs=“unbounded”:表示元素出現的次數無限制
<any>:表示任意元素
約束屬性,寫在復雜元素裏面,位置 </complexType>之前
<attribute name =“id1” type=“int” use=“required”> </attribute>
name:屬性名稱 type:屬性類型 use:屬性是否必須出現
SAX解析
-SAXParser 通過SAXParserFactory.new SAXParser()方法獲得
- parse(File f,DefaultHandler ) 路徑,事件處理器
startElement(String url, String location, String qname, Attributes attribute )
characters(char[] ch ,int start, int length)
endElement(String url, String location, String qname)
- SAXParserFactory 方法 newInstance
4、使用jaxp的sax方式解析xml
sax方式不能實現增刪改操作,只能進行查詢操作
-1、創建解析器工廠
-2、創建解析器
-3、執行parse方法
-4、自己創建一個類,繼承DefaultHandler
5、重寫繼承的3個方法:startElement、characters、endElement
6、獲取所有的name元素的值
-定義一個成員變量 flag=false
-判斷開始放松是否是name元素,如果是name元素,把flag設置為true
-如果flag值是true,在characters方法裏面打印內容
-當執行到結束方法時候,把flag設置為true
7、獲取第一個name元素的值
-定義一個成員變量 inx=1
-在結束方法時候,idx+1 idx++
-想要打印出第一個name元素的的值
在characters方法裏面判斷
判斷flag=true 並且idx==1,再打印內容
schema約束、SAX