XML约束之schema

    xiaoxiao2021-03-25  62

    schema简述

    schema符合xml的语法,(也就是一个xml文件)一个xml中可以有多个schema,多个schema使用名称空间区分dtd里面有PCDATA类型,但是在schema里面可以支持更多的数据类型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() :获取根节点 返回的是ElementElement也是一个接口,父接口是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上面执行这个方法,里面的参数是属性名称
    转载请注明原文地址: https://ju.6miu.com/read-35554.html

    最新回复(0)