java程序员第六课DOM&XML

原创 2015年11月17日 16:30:30

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语法

版权声明:

黑马程序员_java的面向对象(对第六课静态..类的加载过程和单例的总结)

------- android培训、java培训、期待与您交流! ---------- 通过今天对java语言面向对象的学习,我来给自己的学习内容做下简单直白的总结: 首先,我来总结下...

java教程 第六课-1 函数

  • 2012年06月07日 10:14
  • 648KB
  • 下载

java教程 第六课-2 函数

  • 2012年06月07日 10:14
  • 720KB
  • 下载

java第六课课堂笔记(抽象类)

1、抽象类是用关键字abstract来修饰的类,抽象类不能被实例化(不能使用new)。但是抽象类可以有构造函数。 2、抽象类中可以有抽象函数 也可以没有抽象函数,但是有抽象函数的类一定是抽象类。 ...

java第六课_继承,覆写,final关键字,抽象,接口

继承:   提高了代码的复用性。   让类与类产生了关系,有了这个关系,才有了多态的特性。   JAVA语言中:对于类来说,只支持单继承,不支持多继承。(因为多继承会带来安全隐患:当...
  • f5647
  • f5647
  • 2013年04月04日 09:21
  • 552

Java第六课 数组的复制与排序,Runtime类与Process类,Class类与反射API,Runtime类与单例设计模式。

Java的常用包 java.applet:包含一些用于创建Java小应用程序的类。 java.awt:包含一些用于编写与平台无关的图形界面(GUI)应用程序的类。 java.io:包含一些用作输...

java 第六课 方法

方法 方法是类或对象的行为特征的抽象,是类或对象最重要的组成部分。       方法不能独立存在,方法必须属于类或对象。因此,如果需要定义方法,则只能在类体内定义。 ¯ 使用static修饰方法...

Java第六课

基本类型和引用类型的区别: 基本类型一共8种:(byte,short,int,long      float,double   char   boolean) 引用类型一共3种:类    ...

JAVA学习第六课(面向对象)

转载自:http://blog.csdn.net/wjw0130/article/details/39127777 面向对象首先要先了解什么是面向对象? 面向对象:就是不断的和对象打交道。...

Java笔记第六课(代码块&继承)

一. 代码块 概念:  使用{  } 括起来的代码,称为代码块 分类: 根据它位置和声明的不同,我们可以将代码块分为局部代码块,构造代码块,静态代码块,同步代码块(多线程涉及) a. 局部代码块...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java程序员第六课DOM&XML
举报原因:
原因补充:

(最多只允许输入30个字)