关闭

java程序员第六课DOM&XML

标签: java
466人阅读 评论(0) 收藏 举报
分类:

java程序员第六课DOM&XML

1、上节内容回顾
* 表单提交方式:
- type=”submit”
- 使用button ,获取form,使用form里面submit()方法
* 事件 onclick onchange onfocus onblur

* xml:可扩展标记型语言(标签是自定义的)

* xml的应用

* xml语法
    - 文档声明:放在第一行第一列  <?xml version="1.0" encoding="utf-8"?>
    - 元素定义:
        ** 有开始标签也要有结束标签
        ** 区分大小写
        ** 不能以数字下划线 xml.....
    - 属性定义
    - 转义字符 < > & " ,
    - CDATA区:将里面的内容作为字符串,而不是作为标签
    - 处理指令:设置xml的样式
* 约束有 dtd 和 schema
* dtd约束
    ** 格式 <!ELEMENT 元素名称 使用规则>

* 元素的使用规则:
    ** 简单元素
    - (#PCDATA)
    - EMPTY
    - ANY

    **复杂元素
    - (name,age,sex):按照顺序出现
    - (name|age|sex): 只能出现其中的一个
    - name+:一次或者多次
    - name*:任意次数
    - name?:0次或者1次
* 属性的使用规则
    格式:<!ATTLIST 元素名称 
            属性名称 属性类型  约束
        >
    ** 属性类型
        - CDATA
        - ID:以字母和下划线开头
        - 枚举:每次只能出现范围中的一个
    ** 约束:
        - #REQUIRED
        - #IMPLIED
        - #FIXED "ABC"
        - 直接值 "aaa"
* 在xml中引入dtd(三种)
    1、使用内部dtd
    2、使用外部的dtd
    3、使用公共的dtd

* 定义实体
    格式: <!ENTITY 实体名称 "实体内容">
    使用: &实体名称;

* 解析xml 两种方式 dom 和 sax
* jaxp解析xml dom方式
* jaxp是javase的一部分,是sun公司提供的解析器

2、jaxp使用sax方式解析xml
* sax方式解析的原理
- 采用事件驱动方式,边读边解析
* 画图分析sax方式
* 需要两部分:解析器和事件处理器

** 实现事件驱动器:继承DefaultHandler类,重写里面的方法

* 使用sax方式获取整个xml文档
    使用第一个方法里面的参数 qName(开始标签名称)
    使用第二个方法里面 string构造
    使用第三个方法里面 qName(结束的标签名称)

* 使用sax方式获取的某个标签的文本内容
    * 定义成员变量 flag = false
    ** 如果执行到想要获取的标签的时候,flag值ture
    ** 如果flag值是true时候,打印内容

    * 定义一个下标
    * 每次执行到结束标签时候 下标加1

3、使用dom4j解析xml(***
* 是一个组织dom4j组织提供的,jdom的关系
* dom4j不是javase的一部分,如果想要使用,使用提供的jar包,把jar包放到项目中

* 如何把jar包加入到项目中,
- 创建文件夹,把jar包黏贴进去
- 右键点击这个jar包,build path - add to build path
- jar图标变成奶瓶的效果

4、使用dom4j查询xml里面的元素
* - element(QName qName) :获取某一个元素(第一个)

- elements(QName qName) :获取所有元素 name

- elements() :获取p1下面的所有元素

5、使用dom4j添加元素(末尾添加)
* 在第一个p1下面添加女
/*
* 1、获取dom4j的解析器
* 2、执行read方法,返回document
* 3、获取根节点
*
* 4、获取到第一个p1
* 5、在第一个p1下面添加 直接使用addElement添加sex
* 6、向sex里面添加内容 setText(“女”);
*
* 7、回写xml
//格式化操作
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(“src/person.xml”), format);
xmlWriter.write(document);
//关闭
xmlWriter.close();

6、使用dom4j在特定位置添加元素
* 在女之前添加 100
* /*
* 1、获取dom4j的解析器
* 2、执行read方法,返回document
* 3、获取根节点
*
* 4、获取到第一个p1

     * 5、执行添加操作   elements():获取p1下面的所有元素
     *  * 得到要添加的位置
     *  * 创建要添加的元素 
     *  * 在p1下面执行elements方法得到p1下面的所有元素 list
     *  * list里面的  add(int index, E element)
        ***  创建要添加的元素  DocumentHelper类创建
     * 6、回写xml
     * createPrettyPrint():表示格式化的方法
      createCompactFormat():表示压缩的方法
     * */

7、使用dom4j修改元素
* 把女 修改男
* /*
* 1、获取dom4j的解析器
* 2、执行read方法,返回document
* 3、获取根节点
*
* 4、获取p1
* 5、获取p1下面的sex
* 6、完成修改操作 setText(“要修改的内容”)
* 7、回写xml

     * */

8、使用dom4j删除元素
* 删除第一个p1下面的360310198901018910
* /*
* 1、获取dom4j的解析器
* 2、执行read方法,返回document
* 3、获取根节点
*
* 4、获取到第一个p1
* 5、获取p1下面的id
*
* 6、执行删除操作
* 获取父节点: getParent()方法获取
* 通过父节点删除 使用remove方法删除
* 7、回写xml
* */

9、使用dom4j获取属性
* 获取属性值 id=”itcast”
* /*
* 1、获取dom4j的解析器
* 2、执行read方法,返回document
* 3、获取根节点
*
* 4、获取到p1 element方法
* 5、获取p1上面的属性值 attributeValue(“属性名称”)
*
* */

10、dom4j对XPath的支持
* xpath:一种书写形式,使用xpath可以直接获取xml中某个元素
* 要想使用xpath(要想dom4j对XPath的支持),必须先要引入xpath的jar包

* 用法:
    1、/AAA/DDD/BBB:按层进行获取元素 
    2、//BBB:表示无论有多少层,只要名称是BBB,都获取到
    3、*:表示所有内容
    4、/AAA/BBB[1]:表示第一个BBB
     /AAA/BBB[last()]:表示最后一个BBB
    5、@id: 表示属性名称是id元素
     //BBB[@id] : 表示BBB元素上面有id属性的
    6、 //BBB[@id='b1'] :表示BBB元素上面有id属性,并且属性值是b1

* 使用dom4j支持xpath来操作xml
    - selectNodes("xpath");
    - selectSingleNode("xpath");

* selectNodes("xpath");获取xml中所有name元素的内容
    * /*
     * 1、获取解析器
     * 2、执行read方法,返回document
     * 
     * 3、使用xpath获取name元素 返回list结合
     * 4、遍历list
     * 5、根据每次遍历出来的name元素,获取name的值
     * */
    * List<Node> list = document.selectNodes("//name");

* selectSingleNode("xpath");获取第一个p1下面的name的内容
    * /*
     * 1、获取解析器
     * 2、执行read方法,返回document
     * 
     * 3、使用xpath获取第一个p1下面的name元素  //p1[@id]/name
     * 4、得到的name元素,获取内容
     * 
     * */
    * Node name1 = document.selectSingleNode("//p1[@id]/name");

11、xml的约束值schema
* 之前学习了dtd,为什么还要学习schema?
* dtd和schema的比较
- dtd语法

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场