Web学习第六天:dom4j

版权声明:斌哥版权,如有雷同,纯属虚构 https://blog.csdn.net/iostream992/article/details/85179498

 

1、schema约束

  • dtd语法:<!ELEMENT 元素名称 约束>

    • schema符合xml的语法,xml语法

    • 一个xml中可以由多个schema,多个schema使用名称空间区分(类似java包名)

    • dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型

      • 比如 年龄 只能是证书,在schema可以直接定义一个整数类型

    • schema语法更加复杂,schema目前不能替代dtd

2、schema的快速入门

 

 

 

 

 

 

 

 

 

3、sax解析的原理

画图分析:

 

 

 

 

 

 

 

 

 

5、使用dom4j解析xml(**)

  • Dom4j,是一个组织,针对xml解析,提供解析器dom4j

  • Dom4j表示javese的一部分,想要使用怎么做?

    • 导入dom4j提供的jar包

      • 创建一个文件夹到文件夹lib

      • 复制jar包到礼包下面

      • 右键点击jar包,build path->add to buildpath

      • 看到jar包变成奶瓶样子,表示导入成功

      •    得到document

      • documnet的发接口是Node

        • 如果在document里面找不到想要的方法,到Node里面去找

      • document里面的方法 getRootElement():获取根节点 返回的是Element

      • Element也是一个接口,父接口是Node

        • Element和Node里面方法

          • getParent():获取父节点

          • addElement:添加标签

          • element(qname)

            • 表示获取标签下面的第一个子标签

            • qname:标签的名称

          • elements(qname)

            • 获取标签下面的是中国名称的所有子标签(一层)

            • qname:标签的名称

          • elements()

            • 获取标签下面的所有一层子标签

 

6、使用dom4j查询xml

  • 查询所有name元素里面的值

    • 1、创建解析器

    • 2、得到document

    • 3、得到根节点   getRootElement() 返回Element

    • 4、得到所有的p1标签

    • Element("p1") 返回list集合

      • 遍历list得到每个p1

    • 5、得到name

      • 在p1下面执行 element("name")方法 返回Element

    • 6、得到name里面的值

      • getText方法得到值

  • 查询第一个name元素的值

    • 1、创建解析器

    • 2、得到document

    • 3、得到根节点   getRootElement() 返回Element

    • 4、得到第一个p1元素

      • Element("p1") 方法 返回ELement

    • 5、得到p1下面的name

      •  element("name")方法 返回Element

    • 6、得到name里面的值

      • getText方法得到值

  • 获取第二个name元素的值

7、实现添加操作

  • 在第一个p1标签下添加一个操作

    • 1、创建解析器

    • 2、得到document

    • 3、得到根节点

    • 4、获取到第一个p1

      • 使用Element方法

    • 5、在p1下直接添加元素

      • 在p1上面直接使用addElemnet("标签名称")方法 返回一个Element

    • 6、在添加完成后的元素下方添加文本

      • 在sex上直接使用setText("文本内容")方法

    • 7、回写xml

      • 格式化OutputFormat

      • 使用createPrettyPrint方法可以有缩进效果

      • 使用类XMLWriter直接new这个类,传递两个参数

        • 第一个参数是xml文件路径 new FileOutputStream("路径")

        • 第二个参数是格式化类的值

8、在特定位置添加元素

  • 在第一个p1下面的标签添加<sex>nv</sex>

    • 1、创建解析器

    • 2、得到document

    • 3、得到根节点

    • 4、获取到第一个p1

    • 5、获取p1下面的所有元素

      • elements()方法 返回list集合

      • 创建元素 使用

      • 在元素(school)下面创建文本

      • 在特定位置添加元素、

        • add(int index,E element)

          • 第一个参数:位置下标,从0开始

          • 第二个参数:要添加的元素

    • 6、回写xml

    • 导包注意

 

9、dom4j里面封装方法

 

 

 

 

 

 

 

10、dom4j实现修改节点操作

  • 修改第一个pi下的age元素的值<age>300</age>

    • 1、得到document(用封装方法)

    • 2、得到根节点

    • 3、得到第一个p1的元素

    • 4、得到第一个p1下面的age

    • 5、原始值是20,变成300

    • 6、回写xml

 

11、使用dom4j实现删除节点的操作

  • 删除第一个p1下边的school操作

    • 1、得到document(用封装方法) ctrl+shift+o快速导包

    • 2、得到根节点

    • 3、得到第一个p1的元素

    • 4、得到第一个p1下面的school

    • 5、删除(使用父节点p1删除school)

      • 取父节点的方法:getParent()【本题不需要】

      6、回写xml

 

 

12、使用dom4j获取属性的操作

  • 获取第一个p1里面的属性id1的值

    • 1、得到document(用封装方法) ctrl+shift+o快速导包

    • 2、得到根节点

    • 3、得到第一个p1的元素

    • 4、得到p1里面的属性值

 

 

13、使用dom4j支持xpath的操作

  • 可以直接获取到某个元素

  • 第一种形式

    • /AAA/DDD/BBB: 表示一层一层的,AAA下面DDD下面的BBB

  • 第二种形式

    • //BBB: 表示和这个名称相同,表示主要名称是BBB都可以得到

  • 第三种形式

    •  /*: 所有元素

  • 第四种形式

    • BBB[1]: 表示第一个BBB元素

    • BBB[last( )]: 表示最后一个BBB元素

  • 第五种形式

    • //BBB[@id]: 表示BBB元素上有id属性,都可得到

  • 第六种形式

    • //BBB[@id='b1']: 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1

 

14、使用dom4j支持xpath具体操作

  • 默认的情况下,dom4j不支持xpath

  • 如果想要在dom4j里面有xpath

    • 第一步需要,引入支持xpath的jar包,使用jaen-1.1-beta-6.jar

    • 需要把jar包导入到项目中

  • 在dom4j里面提供了两种方法,用来支持xpath

    • selectNodes("xpath表达式")

      • 获取多个节点

    • selectSingleNode("xpath表达式")

      • 获取单一节点

  • # 使用xpath实现:查询xml中所有name元素的值

    • 所有name元素的xpath表示: //name

    • 使用selectNodes("//name")

  • 步骤:

    • 1、得到document(用封装方法)

    • 2、使用使用selectNodes("//name")方法得到所有name元素

    • 3、遍历list集合

  • #使用xpath实现:获取第一个p1下面的name值

    • //p1[@id="aaaa"]/name

    • 使用到selectSingleNode("//p1[@id="aaaa"]/name")

  • 步骤:

    • 1、得到document(用封装方法)

    • 2、直接使用selectSingleNode方法实现

      • xpath: //p1[@id="aaaa"]/name

    • 3、得到name里面的值

 

猜你喜欢

转载自blog.csdn.net/iostream992/article/details/85179498