XML约束之schema

来源:互联网 发布:apache用什么语言写的 编辑:程序博客网 时间:2024/05/18 17:01

schema简述

  1. schema符合xml的语法,(也就是一个xml文件)
  2. 一个xml中可以有多个schema,多个schema使用名称空间区分
  3. dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型
  4. schema语法更加复杂,schema目前不能替代dtd

schema语法(.xsd):

  • 在schema文件里面
    属性:
    1) xmlns=”http://www.w3.org/2001/XMLSchema”(表示当前xml文件是一个约束文件)
    2) targetNamespace=”http://www.itcast.cn/20151111”(随便写,但必须保证唯一,要和被约束文件中的地址相同,直接通过这个地址引入约束文件
    3) elementFormDefault=”qualified”
  • 步骤:
    (1)看xml中有多少个元素 ,简单元素和复杂元素
    * 如果简单元素直接写
    <element name=”age” type=”int”/>
    *如果复杂元素
   <complexType>                     <sequence>                      <element name="age" type="int"/>                    </sequence>       </complexType>
    (2)简单元素,写在复杂元素的
    <element name="person">            <complexType>            <sequence>(表示元素出现的顺序)                    <element name="name" type="string"></element>                    <element name="age" type="int"></element>            </sequence>            </complexType>            </element>
    (3)在被约束文件里面引入约束文件 

<person
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”(表示xml是一个被约束文件)
xmlns=”http://www.itcast.cn/20151111”(是约束文档里面 targetNamespace)
xsi:schemaLocation=”http://www.itcast.cn/20151111 1.xsd”>(targetNamespace 空格 约束文档的地址路径)

  • <sequence>:表示元素的出现的顺序
    <all>: 元素只能出现一次
    <choice>:元素只能出现其中的一个
    maxOccurs=”unbounded”: 表示元素的出现的次数(相当是属性)
    <any></any>:表示任意元素
    写在 </complexType>之前
<attribute name="id1" type="int" use="required"></attribute>
        - name: 属性名称        - type:属性类型 int stirng        - use:属性是否必须出现 required

* 引入多个schema文件,可以给每个起一个别名

    <dept:name>100</dept:name>    * 想要引入部门的约束文件里面的name,使用部门的别名 detp:元素名称

SAX解析:

  • 事件驱动,边读边解析( 在javax.xml.parsers包里面)
  • SAXParser
    此类的实例可以从 SAXParserFactory.newSAXParser() 方法获得
    - parse(File f, DefaultHandler dh)
    ** 第一个参数:xml的路径
    ** 事件处理器
  • SAXParserFactory(实例 newInstance() 方法得到)
    sax执行过程:
    * 当解析到开始标签时候,自动执行startElement方法
    * 当解析到文本时候,自动执行characters方法
    * 当解析到结束标签时候,自动执行endElement方法

  • 重写里面的三个方法

使用dom4j解析XML文件

  • dom4j,是一个组织,针对xml解析,提供解析器 dom4j
  • 得到document
    SAXReader reader = new SAXReader();
    Document document = reader.read(url);
  • document的父接口是Node
    如果在document里面找不到想要的方法,到Node里面去找
    document里面的方法 getRootElement() :获取根节点 返回的是Element
  • Element也是一个接口,父接口是Node
    - Element和Node里面方法
    ** getParent():获取父节点
    ** addElement:添加标签
  • element(qname)
    ** 表示获取标签下面的第一个子标签
    ** qname:标签的名称
  • elements(qname)
    ** 获取标签下面是这个名称的所有子标签(一层)
    ** qname:标签名称
  • elements()
    ** 获取标签下面的所有一层子标签

> * 查询所有name元素里面的值

        1、创建解析器        2、得到document        3、得到根节点  getRootElement() 返回Element        4、得到所有的p1标签            * elements("p1") 返回list集合            * 遍历list得到每一个p1        5、得到name            * 在p1下面执行 element("name")方法 返回Element        6、得到name里面的值            * getText方法得到值

> * 使用dom4j实现添加操作

步骤:
1、创建解析器
2、得到document
3、得到根节点
4、获取到第一个p1
* 使用element方法
5、在p1下面添加元素
* 在p1上面直接使用 addElement(“标签名称”)方法 返回一个Element
6、在添加完成之后的元素下面添加文本
* 在sex上直接使用 setText(“文本内容”)方法
7、回写xml
* 格式化 OutputFormat,使用 createPrettyPrint方法,表示一个漂亮的格式
* 使用类XMLWriter 直接new 这个类 ,传递两个参数
* 第一个参数是xml文件路径 new FileOutputStream(“路径”)
* 第二个参数是格式化类的值

使用dom4j实现在特定位置添加元素

步骤:
1、创建解析器
2、得到document
3、得到根节点
4、获取到第一个p1
5、获取p1下面的所有的元素
elements()方法 返回 list集合
使用list里面的方法,在特定位置添加元素
首先创建元素 在元素下面创建文本
使用DocumentHelper类方法createElement创建标签
把文本添加到标签下面 使用 setText(“文本内容”)方法
list集合里面的 add(int index, E element)
第一个参数是 位置 下标,从0开始
第二个参数是 要添加的元素

使用dom4j实现修改节点的操作

步骤:
1、得到document
2、得到根节点,然后再得到第一个p1元素
3、得到第一个p1下面的age
element(“”)方法
4、修改值是 30
使用setText(“文本内容”)方法
5、回写xml

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

      1、得到document      2、得到根节点      3、得到第一个p1标签      4、得到第一个p1下面的school元素      5、删除(使用p1删除school)      得到school的父节点            - 第一种直接得到p1            - 使用方法 getParent方法得到        * 删除操作            - 在p1上面执行remove方法删除节点      6、回写xml

使用dom4j获取属性的操作

步骤:

      1、得到document      2、得到根节点      3、得到第一个p1元素      4、得到p1里面的属性值        - p1.attributeValue("id1");        - 在p1上面执行这个方法,里面的参数是属性名称
0 0
原创粉丝点击