schema約束????????
? ? ? ? ? ? ? ? dtd語法:<!ELEMENT? 元素名稱? 約束>
? ? ? ? ? ? ? ? schema符合xml語法苏携,xml語句
? ? ? ? ? ? ? ? 一個xml中可以有多個schema封恰,多個schema使用名稱空間區(qū)分(類似于java包名)
? ? ? ? ? ? ? ? dtd里面有PCDATA類型灵奖,但是在schema里面可以支持更多的數(shù)據(jù)類型
? ? ? ? ? ? ? ? ? ? 比如? 年齡? 只能是整數(shù),在schema可以直接定義一個 ?? 整數(shù)類型
? ? ? ? ? ? ? ? schema語法更加復雜兄朋,schema目前無法替代dtd
schema的快速入門
? ? ? ? ? ? ? ? 創(chuàng)建一個schema文件 ? 后綴名是? .xsd
? ? ? ? ? ? ? ? ? ? ? ? 根節(jié)點<>
??????????????????????????? 在schema文件里面
? ? ? ? ? ? ? ? ? ? ? ? 屬性? xmlns="http://www.w3.org/2001/XMLSchema"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表示當前xml文件是一個約束文件
? ? ? ? ? ? ? ? ? ? ? ? targetNamespace="http://www.itcast.cn/20151111"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 使用schema約束文件仙蚜,直接通過這個地址引入約束文件
? ? ? ? ? ? ? ? ? ? ? ? elementFormDefault="qualified" ? ??
????????????步驟???????
? ? ? ? ? ? ? ? 1.看xml中有多少個元素 ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? <element>
? ? ? ? ? ? ? ? 2.看簡單元素和復雜元素
? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果復雜元素
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <complexType>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <sequence>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 子元素
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </sequence>
? ? ? ? ? ? ? ? 3.簡單元素脂倦,寫在復雜元素的
? ? ? ? ? ? ? ? ? ? ? ? ? ? <element name="person">
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <complexType>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <sequence>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <element name="name"? type="string"></element>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <element name="age"? type="int"></element>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </sequence>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </complexType>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? </element>
? ? ? ? ? ? ? ? ? ? 4.在被約束文件里面引入約束文件?
? ? ? ? ? ? ? ? ? ?? <person xmlns:xsi="http://www.w3.org/2011/XMLSchema-instance"
? ? ? ? ? ? ? ? ? ? xmlns="http://www.itcast.cn/20151111"
? ? ? ? ? ? ? ? ? ? xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd"???????>?
? ? ? ? ? ? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
????????????????????????????????????——表示 xml 是一個被約束文件 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
????????????????????xmlns="http://www.itcast.cn/20151111 "
????????????????????????????????????——是約束文檔里面? targetNamespace
? ? ? ? ? ? ? ? ?? xsi:schemaLocation="http://www.itcast.cn/20151111 1.xsd">
????????????????????targetNamespace 空格 約束文檔的地址路徑
? ? ? ? ? ? <sequence>:表示元素的出現(xiàn)的順序
? ? ? ? ? ? <all>:元素只能出現(xiàn)一次 ? ?
? ? ? ? ?? <choice>:元素只能出現(xiàn)其中的一個 ? ??
? ? ? ? ? ? maxOccurs="unbounded"? 表示元素的出現(xiàn)的次數(shù)
? ? ? ? ? ? <any></any>:表示任何元素
? ? ? ? ? ? 可以約束任何元素
? ? ? ? ? ? ? ? 寫在復雜元素里面
sax解析的原理
解析xml有兩種技術(shù)? dom和sax
?根據(jù)xml的層級結(jié)構(gòu)在內(nèi)存中分配一個樹形結(jié)構(gòu)
? ? ? ? ? 把xml中標簽,屬性冯痢,文本封裝成對象
? ? sax方式:事件驅(qū)動氮昧,邊讀邊解析
? ?? 在java.xml.parsers包里面
? ? ? ? ? ? ? ? ? ? ?? SAXParser
? ? ? ? ? ? ? ? ? ? ? ? ? ? 此類的實例可以從SAXParserFactory.newSAXParser() 方法獲得
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? parse
? ? ? ? ? ? ? ? ? ? ?? SAXParserFactory
? ? ? ? ? ? ? ? ? ? ? ? ? ? 實例 newInstance() 方法得到
? ? ? ? ? ? sax執(zhí)行過程:
? ? ? ? ? ? ? ? ? ? ? ? 當解析到開始標簽時,自動執(zhí)行starElement方法
? ? ? ? ? ? ? ? ? ? ? ? 當解析到文本時候浦楣,自動執(zhí)行characters方法
? ? ? ? ? ? ? ? ? ? ? ?? 當解析到結(jié)束標簽時袖肥,自動執(zhí)行endElement方法
使用jaxp的sax方式解析
? ? sax方式不能實現(xiàn)增刪改操作,只能做查詢操作
? ? 打印出整個文檔
? ? ? ? ? ? 執(zhí)行parse方法振劳,第一個參數(shù)xml路徑椎组,第二個參數(shù)是 事件處理器
? ? ? ? ? ? ? ? ? ? 創(chuàng)建一個類,繼承事件處理器的類
? ? ? ? ? ? ? ? ? ? 重寫里面的三個方法
? ? ? ? ? ? 獲取到所有的name元素的值
? ? ? ? ? ? ? ? ? ? 定義一個成員變量? flag=false;
? ? ? ? ? ? ? ? ? ? 判斷開始方法是否是name元素历恐,如果是name元素 ?? 寸癌,把flag值設(shè)置成true
? ? ? ? ? ? ? ? ? ? 當flag值是true,在characters方法里面打印內(nèi)容
? ? ? ? ? ? ? ? ? ? 當執(zhí)行到結(jié)束方法時弱贼,把flag值設(shè)置成false
? ? ? ? ? ? 獲取第一個name元素的值
? ? ? ? ? ? ? ? ? ? 定義一個成員變量 idx=1灵份;
? ? ? ? ? ? ? ? ? ? 在結(jié)束方法時候, idx+1? idx++
? ? ? ? ? ? ? ? ? ? 想要打印出第一個name元素的值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 在characters方法里面判斷
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 判斷flag=true并且 idx==1哮洽,在打印內(nèi)容
使用dom4j解析xml
? ? ? ? dom4j填渠,是一個組織,針對xml解析鸟辅,提供解析器 dom4j
? ? ? ? dom4j不是javase的一部分氛什,想要使用第一步需要怎么做
? ? ? ? ? ? ? ? 導入dom4j提供jar包
? ? ? ? ? ? ? ? 創(chuàng)建一個文件夾lib
? ? ? ? ? ? ? ? 復制jar包到lib下面
? ? ? ? ? ? ? ? 右鍵點擊jar包 ,bulid path--add to bulidpath
? ? ? ? ? ? ? ? 看到j(luò)ar包匪凉, 變成奶瓶樣子枪眉,表示導入成功
? ? 得到document
????????????????SAXReader reader=new SAXReader();
? ? ? ? ? ? ? ? Document document=reader.read(url);
? ? document的父接口是Node
? ? ? ? ? ? ? ? 如果在document里面找不到想要的方法再层,到Node里面去找
? ? document里面的方法 ? getRootElment():獲取根節(jié)點 ? 返回的是Element
? ? Element也是一個接口贸铜,父接口是Node
? ? ? ? ? ? ? ?? Element和Node里面方法:
? ? ? ? ? ? ? ? ? ? ? ? getParent():獲取父節(jié)點
? ? ? ? ? ? ? ? ? ? ? ?? addElement:添加標簽
使用dom4j查詢xml
? ? ? ? ? ? 查詢所有name元素里面的值
? ? ? ? ? ? ? ? ? ? 1.創(chuàng)建解析器
? ? ? ? ? ? ? ? ? ? 2.得到document
? ? ? ? ? ? ? ? ? ? 3.得到根節(jié)點
? ? ? ? ? ? ? ? ? ? 4.得到所有的p1標簽
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? element(qname)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 表示獲取標簽下面的第一個子標簽
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? qname:標簽的名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? elements(qname)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 獲取標簽下面是這個名稱的所有子標簽(一層)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? qname:標簽名稱
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? element();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 獲取標簽下面的所有一層子標簽
? ? ? ? ? ? ? ? ? ? 5.得到name
? ? ? ? ? ? ? ? ? ? 6.得到name里面的值
????????
? ? ?
????????????????
????????????????
????????????????????
????????????
????????
????????????
????????????