Java基础之XML解析
2018-01-27 09:34
183 查看
#### XML约束之Schema约束-命名空间的概述
* Schema的基本概念
1. Schema本身也是一个XML文件,后缀文件名是XSD
2. Schema本身也是一个XML文件,所以Schema也是需要被约束的,但Schema的约束由官方指定(W3C)
3. 一个XML文件可以有多个Schema约束,所以可能出现两个不同的Schema文件中的约束条件有相同的元素名的情况,所以需要命名空间
4. 一个实例文档在引入多个模式文档时,只能有一个模式文档是默认的,其他的必须写上前缀,默认的可以不使用前缀,理解为导包
5. 实例文档前两句都是在引入模式文档,一个是自己的一个是官方的
* Schema的相关概念之模式
* 模式文档:写了约束规则的Schema文件
* 实例文档:被约束的XML文件
#### 命名空间
1. 命名空间的引用格式(xmlns是引用文档的声明)
###第一句<schema xmlns:xs="http://wwww.w3.org/2001/XMLSchema">
1.在开始标签中使用 xmlns:前缀="URL地址"
2. URI地址可以是任意字符串,但需要是唯一的。地址的作用就是为了保证命名空间的唯一,一般使用公司网址,这个网址是不会被访问的,
3. 在eclipse中会自动生成这句,xmlns:xs="http://wwww.w3.org/2001/XMLSchema",这句话不需要改,
4. 上面那句话表示该模式文档使用的标签或数据类型来自于http://wwww.w3.org/2001/XMLSchema,因为Schema本身也是需要约束的,这句话就是表示官方对其的约束,这个网址里有Schema的约束规则。
5. 这句话还有一个作用,表示使用的标签或元素都要遵守这个网址里规定的规则,如element,complexType标签等。
###targetNamespace="http://www.itheima.com/note"
1. 当前模式文档的约束将被绑定到http://www.itheima.com/note
##命名空间的作用
* 默认命名空间
* 没有使用前缀的命名空间就是默认的命名空间
* 一个实例文档中只能有一个默认的命名空间。
* 命名空间的作用
* 要来告诉实例文档中使用的标签或属性来自于哪一个模式文档
* 可以避免标签名和属性名命名冲突。
* 使用前缀避免冲突问题。
* note.xsd模式文档的解释
1) schema 是每一个 XML 模式文档的根元素
2) <schema> 元素包含属性 xmlns:xs="http://www.w3.org/2001/XMLSchema"
作用一:表示schema中用到的元素和数据类型来自命名空间"http://www.w3.org/2001/XMLSchema"。
作用二:规定了来自命名空间"http://www.w3.org/2001/XMLSchema"的元素和数据类型使用前缀xs访问。
3) targetNamespace="http://www.itheima.com/note"
表示被此 schema 定义的元素 (note, to, from, heading, body) ,
被绑定到了命名空间:"http://www.itheima.com/note"。
4) elementFormDefault="qualified"
使用此xsd的实例文档必须遵守此文档的约束。
5) note 元素是一个复合类型,因为它包含其他的子元素。
6) <xs:sequence> 表示其中的子元素要按顺序出现
7) 其他元素(to, from, heading, body) 是简易类型,因为它们没有包含其他元素。
* note.xml实例文档的解释
xsi 即 xml schema instance 简写
1)指定XML Schema 实例命名空间:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2)使用xsi:schemaLocation属性
第一个值是需要使用的命名空间。
第二个值是供命名空间使用的XML
schema的位置:xsi:schemaLocation="http://www.itheima.com/note note.xsd"
3)xmlns="http://www.itheima.com/note" 规定了默认命名空间的声明。
此声明会告知schema验证器,在此XML文档中使用的所有元素的约束都来源于
"http://www.itheima.com/note"这个命名空间。也可以指定一个前缀,
这里使用默认的命名空间,则可以省略前缀。
###XML解析概述
* XML解析概述
* 使用java技术获取XML文件中的数据的过程
* XML常用的解析方式
* DOM解析
* 概述:将整个XML文档加载到内存中并生成一颗DOM树
* 缺点:如果XML文档比较大,则会占据很多的内存空间,在PC端广泛使用,手机端基本不用
* 优点:可以在解析过程中对DOM树上的每一个结点进行增删改操作。
* SAX解析
* 概述:一行一行解析,解析一行释放一行,
* 缺点:只能读不能改
* 优点:对内存的占据少,,在手机端广泛使用。
###DOM4J解析
* dom4j概述
* 使用的解析方式就是DOM方式
* 是目前解析XML最优秀的框架,Hibernate默认就是使用dom4j解析XML
###DOM树的组成元素
1. 文档:Document(当我们用DOM解析方式将整个XML文件加载到内存时就会生成一个Document对象)
2. 节点:Node()
3. 元素:Element
4. 属性:Attribute
5. 文本:Text
## Document对象
概述:一个XML对应一个Document对象
### Node概述
概述:DOM树上的每个元素都是一个节点,所以节点是每个元素的父类
* Node常用方法
* Iterator<Node> element.nodeIterator()
*
* short node.getNodeType()
* 获得节点类型
* Node.ELEMENT_NODE:元素节点
* Node.TEXT_NODE:文本节点
* Node.COMMENT_NODE:注释节点
* Node.ATTRIBUTE_NODE: 属性节点
* Element元素(标签)
* 常用方法
* String getName(): 获得元素名字
* Element element(name) :根据子元素的名称获得Elment对象,如果有多个,默认返回第一个
* List<Element> elements(): 获得当前元素下的所有子元素
* List<Element> elements(name):获得当前元素下指定名字的所有子元素
* Attribute属性
* 得到Attribute对象的前提:
* 先获得Element对象
* Attribute attribute(name):根据名字获得属性对象
* Attribute接口的方法
* String getName() 获得属性名
* String getValue() 获得属性值
* String attributeValue(name):根据属性名获得属性值
* List<Attribute> attributes() 获得指定元素下的所有属性对象,返回集合
* Iterator<Attribute> attributeIterator():获得指定元素下属性的迭代器对象
* 代码演示
* 分别使用2种方式,得到contact上id属性值
* 在contact元素上添加一个vip的属性值为true/false
* 分别使用迭代器和List得到contact上所有的属性名和属性值
* Text元素
* 注意事项
a22d
* 换行,制表符,空格都属于文本的一部分
* Element接口中对文本操作的方法
* element.getText(): 获得当前元素文本内容,不会去除前后空格
* element.getTextTrim():获得当前元素文本内容,会去除前后空格
* element.elementText(元素名): 根据子元素名获得子元素的文本内容,不会去除前后空格
* element.elementTextTrim(元素名): 根据子元素名获得子元素的文本内容,会去除前后空格
* 代码演示
* 得到第1个contact中的name元素,输出name元素的文本。
### XML解析之数据的封装
* 需求
* 创建实体类Contact,包含属性:id、name、gender、phone、qq、email,属性全部使用String类型
* 将XML文件中的联系人封装成一个List<Contact>集合,并输出在控制台
* 1) 得到根元素
* 2)得到所有的contact元素
* 3) 得到contact元素中的下级元素封装成数据,其中id是属性,其它的都是文本。
###XMLWriter的使用
XMLWriter构造方法
* XMLWriter(OutputStream out, OutputFormat format)
* 创建XMLWriter对象
* out:字节输出流,关联文件
* format:输出格式对象
* OutputFormat.createCompactFormat()
* 创建紧凑型格式化对象,所有的标签属性都在一行显示。
* OutputFormat.createPrettyPrint()
* 创建漂亮格式化对象, 会自动换行,一个标签占据一行
XMLWriter常用方法
* void write(Document doc)
* 写出一个文档对象
DocumentHelper类常用方法
* Document createDocument(); 创建文档对象
* Schema的基本概念
1. Schema本身也是一个XML文件,后缀文件名是XSD
2. Schema本身也是一个XML文件,所以Schema也是需要被约束的,但Schema的约束由官方指定(W3C)
3. 一个XML文件可以有多个Schema约束,所以可能出现两个不同的Schema文件中的约束条件有相同的元素名的情况,所以需要命名空间
4. 一个实例文档在引入多个模式文档时,只能有一个模式文档是默认的,其他的必须写上前缀,默认的可以不使用前缀,理解为导包
5. 实例文档前两句都是在引入模式文档,一个是自己的一个是官方的
* Schema的相关概念之模式
* 模式文档:写了约束规则的Schema文件
* 实例文档:被约束的XML文件
#### 命名空间
1. 命名空间的引用格式(xmlns是引用文档的声明)
###第一句<schema xmlns:xs="http://wwww.w3.org/2001/XMLSchema">
1.在开始标签中使用 xmlns:前缀="URL地址"
2. URI地址可以是任意字符串,但需要是唯一的。地址的作用就是为了保证命名空间的唯一,一般使用公司网址,这个网址是不会被访问的,
3. 在eclipse中会自动生成这句,xmlns:xs="http://wwww.w3.org/2001/XMLSchema",这句话不需要改,
4. 上面那句话表示该模式文档使用的标签或数据类型来自于http://wwww.w3.org/2001/XMLSchema,因为Schema本身也是需要约束的,这句话就是表示官方对其的约束,这个网址里有Schema的约束规则。
5. 这句话还有一个作用,表示使用的标签或元素都要遵守这个网址里规定的规则,如element,complexType标签等。
###targetNamespace="http://www.itheima.com/note"
1. 当前模式文档的约束将被绑定到http://www.itheima.com/note
##命名空间的作用
* 默认命名空间
* 没有使用前缀的命名空间就是默认的命名空间
* 一个实例文档中只能有一个默认的命名空间。
* 命名空间的作用
* 要来告诉实例文档中使用的标签或属性来自于哪一个模式文档
* 可以避免标签名和属性名命名冲突。
* 使用前缀避免冲突问题。
* note.xsd模式文档的解释
1) schema 是每一个 XML 模式文档的根元素
2) <schema> 元素包含属性 xmlns:xs="http://www.w3.org/2001/XMLSchema"
作用一:表示schema中用到的元素和数据类型来自命名空间"http://www.w3.org/2001/XMLSchema"。
作用二:规定了来自命名空间"http://www.w3.org/2001/XMLSchema"的元素和数据类型使用前缀xs访问。
3) targetNamespace="http://www.itheima.com/note"
表示被此 schema 定义的元素 (note, to, from, heading, body) ,
被绑定到了命名空间:"http://www.itheima.com/note"。
4) elementFormDefault="qualified"
使用此xsd的实例文档必须遵守此文档的约束。
5) note 元素是一个复合类型,因为它包含其他的子元素。
6) <xs:sequence> 表示其中的子元素要按顺序出现
7) 其他元素(to, from, heading, body) 是简易类型,因为它们没有包含其他元素。
* note.xml实例文档的解释
xsi 即 xml schema instance 简写
1)指定XML Schema 实例命名空间:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2)使用xsi:schemaLocation属性
第一个值是需要使用的命名空间。
第二个值是供命名空间使用的XML
schema的位置:xsi:schemaLocation="http://www.itheima.com/note note.xsd"
3)xmlns="http://www.itheima.com/note" 规定了默认命名空间的声明。
此声明会告知schema验证器,在此XML文档中使用的所有元素的约束都来源于
"http://www.itheima.com/note"这个命名空间。也可以指定一个前缀,
这里使用默认的命名空间,则可以省略前缀。
###XML解析概述
* XML解析概述
* 使用java技术获取XML文件中的数据的过程
* XML常用的解析方式
* DOM解析
* 概述:将整个XML文档加载到内存中并生成一颗DOM树
* 缺点:如果XML文档比较大,则会占据很多的内存空间,在PC端广泛使用,手机端基本不用
* 优点:可以在解析过程中对DOM树上的每一个结点进行增删改操作。
* SAX解析
* 概述:一行一行解析,解析一行释放一行,
* 缺点:只能读不能改
* 优点:对内存的占据少,,在手机端广泛使用。
###DOM4J解析
* dom4j概述
* 使用的解析方式就是DOM方式
* 是目前解析XML最优秀的框架,Hibernate默认就是使用dom4j解析XML
###DOM树的组成元素
1. 文档:Document(当我们用DOM解析方式将整个XML文件加载到内存时就会生成一个Document对象)
2. 节点:Node()
3. 元素:Element
4. 属性:Attribute
5. 文本:Text
## Document对象
概述:一个XML对应一个Document对象
### Node概述
概述:DOM树上的每个元素都是一个节点,所以节点是每个元素的父类
* Node常用方法
* Iterator<Node> element.nodeIterator()
*
* short node.getNodeType()
* 获得节点类型
* Node.ELEMENT_NODE:元素节点
* Node.TEXT_NODE:文本节点
* Node.COMMENT_NODE:注释节点
* Node.ATTRIBUTE_NODE: 属性节点
* Element元素(标签)
* 常用方法
* String getName(): 获得元素名字
* Element element(name) :根据子元素的名称获得Elment对象,如果有多个,默认返回第一个
* List<Element> elements(): 获得当前元素下的所有子元素
* List<Element> elements(name):获得当前元素下指定名字的所有子元素
* Attribute属性
* 得到Attribute对象的前提:
* 先获得Element对象
* Attribute attribute(name):根据名字获得属性对象
* Attribute接口的方法
* String getName() 获得属性名
* String getValue() 获得属性值
* String attributeValue(name):根据属性名获得属性值
* List<Attribute> attributes() 获得指定元素下的所有属性对象,返回集合
* Iterator<Attribute> attributeIterator():获得指定元素下属性的迭代器对象
* 代码演示
* 分别使用2种方式,得到contact上id属性值
* 在contact元素上添加一个vip的属性值为true/false
* 分别使用迭代器和List得到contact上所有的属性名和属性值
* Text元素
* 注意事项
a22d
* 换行,制表符,空格都属于文本的一部分
* Element接口中对文本操作的方法
* element.getText(): 获得当前元素文本内容,不会去除前后空格
* element.getTextTrim():获得当前元素文本内容,会去除前后空格
* element.elementText(元素名): 根据子元素名获得子元素的文本内容,不会去除前后空格
* element.elementTextTrim(元素名): 根据子元素名获得子元素的文本内容,会去除前后空格
* 代码演示
* 得到第1个contact中的name元素,输出name元素的文本。
### XML解析之数据的封装
* 需求
* 创建实体类Contact,包含属性:id、name、gender、phone、qq、email,属性全部使用String类型
* 将XML文件中的联系人封装成一个List<Contact>集合,并输出在控制台
* 1) 得到根元素
* 2)得到所有的contact元素
* 3) 得到contact元素中的下级元素封装成数据,其中id是属性,其它的都是文本。
###XMLWriter的使用
XMLWriter构造方法
* XMLWriter(OutputStream out, OutputFormat format)
* 创建XMLWriter对象
* out:字节输出流,关联文件
* format:输出格式对象
* OutputFormat.createCompactFormat()
* 创建紧凑型格式化对象,所有的标签属性都在一行显示。
* OutputFormat.createPrettyPrint()
* 创建漂亮格式化对象, 会自动换行,一个标签占据一行
XMLWriter常用方法
* void write(Document doc)
* 写出一个文档对象
DocumentHelper类常用方法
* Document createDocument(); 创建文档对象
相关文章推荐
- java基础-使用dom4j解析XML文件
- Hadoop基础教程-第4章 HDFS的Java API(4.3 pom.xml解析)
- java基础之概谈xml文件解析
- Java基础之解析XML
- Java基础学习总结(10)——JAVA解析XML
- JavaWeb-05 XML基础(Dom解析和Sax解析)
- java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)
- XML基础+Java解析XML +几种解析方式的性能比较
- JAVA企业级开发-xml基础语法&约束&解析(04)
- XML基础+Java解析XML +几种解析方式的性能比较
- JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)
- 初学者入门 JAVA 的 XML 编程实例解析-Java基础-Java-编程开发
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
- Java基础 XML解析
- Java基础之XML解析
- JAVA基础——XML解析
- java基础之概谈xml文件解析
- Java基础之XML解析
- xml 解析 java 基础复习
- java基础--解析XML(一)