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