1. 程式人生 > >schema約束、SAX

schema約束、SAX

art ice tca == schema sax complex target lag

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