css和javascript的一些筆記(六) schema sax dom4j xpath

1、schema約束

dtd語法:<!ELEMENT 元素名稱 約束>
** schema 符合xml的語法
** 一個xml中可以有多個schema,多個schema使用名稱空間來區分
** 比dtd支持更多的數據類型
    *** 比如 年齡 只能是整數,schema就可以定義整數類型
** 約束能力強大,語法複雜,目前不能替代dtd

2、schema的快速入門

* 創建一個schema文件 後綴名是.xsd
    ** 根節點<schema>
步驟
    (1)看xml中有多少個元素
        <element>
    (2)看簡單元素和複雜元素!![這裏寫圖片描述](https://img-blog.csdn.net/20160125211754678)
        ** xmlns表示xml文件是一個約束文件
        ** targetNamespace 直接通過地址來引入
<schema xmlns="http://www.w3.org/2001/xmlschema" targetNamespace="http://www.ii.cn" 
            elementFormDefault="qulited">
        <element>
        如果複雜元素
            《complexType>
                <sequence>
     (3)簡單元素寫在複雜元素裏面
    (4)在被約束裏面引入約束文件
<person xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
            xmlns="http://www.ii.cn"
            xsi:schemaLocation="http:http://www.ii.cn 1.xsd">
* sequence 表示出現的順序
<all>表示只能出現一次
<choice>:元素只能出現其中的一個
maxOccurs="unbounded":元素出現的次數沒限制
<any>:表示任意元素

定義屬性
    * 寫在複雜元素裏面
        寫在</complexType>之前
    <attribute name= type= use=>
3、sax解析的原理
* dom和sax
邊讀邊解析 事件驅動
javax.saxparser
saxParser
    parse(file f,defaulthandler dh)
    第一個參數xml路徑
    第二個參數 事件處理器
    當把時間處理器傳遞進來,相當於在方法裏綁定了一個事件
    當解析到開始標籤時候,自動執行startElement方法
    當解析到文本時候,自動執行characters方法
    當解析到結束標籤時候,自動執行endElement方法

4、使用jaxp的sax方式解析xml

只能查詢
執行parse
需要新建類繼承defaulthandler
重寫裏面的三個方法
* 獲取所有name元素的值
    ** 定義一個成員變量flag,如果是name,flag=true
    如果flag=true就在characters裏面打印內容
    結束方法時,flag=false

5、使用dom4j解析xml

*dom4j是一個組織,針對xml解析,提供瞭解析器dom4j
* 不是javase的一部分,想要使用第一步需要導入dom4j.jar
* 得到document
SAXReader reader = new SAXReader();
        Document document = reader.read(url);
* document的父接口是Node
    *如果在document找不到 在Node裏找
* getRootElement();根節點 返回的是Element
* element也是一個接口 父接口是Node
    - getParent() 父節點
    - addElement 添加標籤

6、使用dom4j查詢xml

*查詢所有name元素裏面的值
* 添加 addElement `ouputFormat format = outputformat.crea//用來對回寫後的xml格式化`回寫 需要
XMLwriter xmlwirter = new XMLWriter(new fileOutputStream(路徑),format);
        xmlwriter.write(document);
        xmlwriter.close();
* 添加節點需要
Element root = document.getRootElement();
            Element p1 = root.element(名稱)
            list<element> list = p1.elements();
             documentHelper.createElement("school");
            school.setText()
            list.add(1,school);
        然後回寫

使用dom4j修改節點
使用dom4j實現刪除節點操作
使用dom4j得到屬性值 .attributeValue()

12=使用dom4j支持xpath的操作

可以直接獲取到某個元素

* 第一種形式
    /aaa/dd/bbb:表示一層一層的
* 第二種形式
    //bbb:表示和這個名稱相同,表示只要名稱是bbb,都得到
* 第三種形式
    /aa/bb/* 表示所有元素
* 第四種形式
    bbb[1]表示第一個bbb元素
    bbb[last()]
* 第五種形式
    //bbb[@id]表示只要bbb元素上面有id屬性。都可以得到
* 第六種形式
    //bbb[@id='b1'] 表示元素名稱是bbb,在bbb上面有id屬性,並且id的屬性值是b1

13、使用dom4j xpath具體操作

默認情況  不支持xpath
如果想
    第一步,引入支持xpath的jar包,使用jaxen.jar
    把jar包導入
** 在dom4j裏面提供了兩個方法
    *** selectNodes("xpath表達式")多個節點
    *** selectSingleNode()單一節點
使用xpath實現;查詢xml中所有name
//name
        使用selectNodes("//name");
        List<Node> list = document.selectNodes("//name");
        //遍歷
        for(Node node:list){
            string s = node.getText();
        }

實現簡單的學生管理系統

增刪改查
代碼在網盤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章