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();
        }

实现简单的学生管理系统

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