简单xml的使⽤以及xml的解析dom4j和jaxp
1 xml的简介  w3c组织发布
extensible markup Language :可扩展标记型语⾔ 也是使⽤标签操作
可扩展:html⾥⾯的标签是固定,每个标签都有特定的含义
xml标签可以⾃⼰定义,可以写中⽂的标签
⽤途:显⽰数据(不是主要功能) ,主要为了存储数据
两个版本:1.0 1.1 使⽤的都是1.0版本(1.1不能向下兼容)
2 xml的应⽤
不同系统之间传输数据
⽤来表⽰⽣活中有关系的数据
经常⽤在⽂件配置
⽐如现在连接数据库,肯定得知道数据库的⽤户名和密码,数据名称
如果修改数据库的信息,不需要修改源代码,只要修改配置⽂件就可以
3 xml的语法
1 xml的⽂档声明    后缀名为.xml  如果写xml,第⼀步必须要有⼀个⽂档声明(写了⽂档声明之后,表⽰写xml⽂件的内容)<?xml version="1.0" encoding="gbk"?>
⽂档声明必须写在第⼀⾏第⼀列
属性:version :xml的版本    encoding:xml编码  gbk  utf-8  iso8859-1(不包含中⽂)
standalone : 是否依赖其他⽂件存在
xml问题的解决:保存时候的编码和设置打开时的编码⼀致,不会出现乱码
2 定义元素(标签)
3 定义属性
4 特殊字符
5 CDATE区
6 PI指令
xml标签大全7 注释
5 xml元素的定义
标签定义  例:<person></person> 标签有开始必须要有结束
标签没有内容,可以在标签内结束:<aa/>
标签可以嵌套,但必须合理嵌套
⼀个xml中只能有⼀个根标签,其他标签都是这个标签下⾯的标签
注意:在xml中把空格和换⾏都当成内容来解析
<aa>AAAAA</aa>
<aa>
AAAA
</aa>
以上两端代码含义不⼀样
xml中标签的名称规则
1 xml区分⼤⼩写
<P><p> 这两个标签是不⼀样的
2 xml的标签不能以数字和下划线开头
3 xml的标签不能以xml ,XML.Xml等开头 <Xmla><Xmlb><xmlc> :这些都是不正确的
4 xml的标签不能包含空格或冒号  <a b><b:c>:这些是不正确的
6 xml中属性的定义
<person id1="aaa">  </person>
属性定义的要求
1 ⼀个标签可以有多个属性
2 属性名称不能相同
3 属性名称和属性值之间使⽤= 属性值使⽤引号包起来(可以使⽤单双引号)
4 xml属性名称规范与元素规范是⼀致的
7 xml中的注释
写法<!--  -->
注意:注释不能有嵌套
8 xml中的特殊字符
如果想要在xml中显⽰ a<b 不能正常显⽰,因为把<;当做标签
需要转义:&: &    <:  <    > : >    " : "    ' : '    (后⾯需要;号) 9 CDATA区
可以解决多个字符都需要转义的操作
把这些内容放到CDATA区⾥⾯,不需要转义
写法<![CDATA[ 内容 ]]>
例<![CDATA[ <b>if(a<b && b<c && d>f) {}</b> ]]>
把特殊字符,当做⽂本内容,⽽不是标签
10 PI指令(处理指令)
可以在xml中设置样式
写法:<?xm-stylesheet type="text/css" href="css的路径"?>
设置样式,只能对英⽂标签名称起作⽤,对于中⽂的标签名称不起作⽤
11 语法总结
所有xnl元素都必须有关闭标签
xml标签对⼤⼩写敏感
xml必须有正确的嵌套顺序
xml⽂档必须有根元素(只有⼀个)
xml的属性值必须加引号
特殊字符必须转义  ---CDATA
xml中的空格,回车换⾏在解析时会被保留
12 xml的约束
为什么需要约束?规定xml中只能出现的元素,这个时候需要约束
xml的约束的技术:dtd约束和schema约束
13 dtd的快速⼊门
创建⼀个⽂件 后缀名 .dtd
步骤: 1 看xml中有多少个元素,有⼏个元素,在dtd⽂件中写⼏个<!ElEMENT>
2 判断元素是简单元素还是复杂元素
复杂元素:有⼦元素的元素 <!ELEMENT 元素名称  (⼦元素)>
简单元素: 没有⼦元素  <!ELEMENT 元素名称 (#PCDATA)>
3 需要在xml⽂件中引⼊dtd⽂件
<!DOCTYPE 根元素名称 SYSTEM "dtd⽂件的路径">
打开xml⽂件使⽤浏览器打开的,浏览器只负责校验xml的语法,不负责校验约束
如果想要校验xml的约束,需要使⽤⼯具(myeclipse⼯具)
14 dtd的三种引⼊⽅式
1 引⼊外部的dtd⽂件
<!DOCTYPE 根元素名称 SYSTEM "dtd路径">
2 使⽤内部的dtd⽂件
<!DOCTYPE 根元素名称[
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
3 使⽤外部的dtd⽂件(⽹络上传的dtd⽂件)
<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD⽂档的URL”> (框架structs2 使⽤的⽅式)15 使⽤dtd定义元素
语法:<!ELEMENT 元素名 约束>
简单元素:<!ELEMENT name (#PCDATA)>  (#PCDATA):约束name是字符串类型
EMPTY: 元素为空 (没有内容)(不⽤加括号)
ANYY:  任意元素
复杂元素:<!ELEMENT person (name,age,sex)> 各元素只能出现⼀次
表⽰⼦元素出现的次数
+:表⽰⼀次或者多次
;表⽰零次或者⼀次
*:表⽰零次或者多次
⼦元素直接使⽤逗号进⾏隔开:表⽰元素出现的顺序
⼦元素直接使⽤|隔开:表⽰元素只能出现其中的任意⼀个
16 使⽤dtd定义属性
语法:<!ATTLIST 元素名称
属性名称 属性类型 属性约束
>
属性类型:CDATA::字符串    枚举:(aa|bb|cc) 表⽰只能在⼀定范围内出现值,但是只能每次出现其中⼀个ID :值只能是字母或者下划线卡头
属性的约束:#REQUIRED :表⽰该属性必须出现
#IMPLIED:属性可有可⽆
#FIXED:表⽰⼀个固定的⼀个值 例:#FIXED "AAA"  属性的值必须是设定的这个值
直接值: 例:"WWW" 不写属性,使⽤直接值,写了属性,使⽤设置的值
17 实体的定义
语法<!ELEMENT 实体名称 “实体的值”>  引⽤实体 &实体名称
定义实体需要写在内部dtd⾥⾯,如果写在外部的dtd⾥⾯,在某些浏览器下,内容得不到
18 xml的解析的简介
xml的解析⽅式:dom 和 sax
dom:根据xml的层级结构在内存中分配⼀个树形结构,把xml的标签,属性和⽂本都封装成对象
缺点:如果⽂件过⼤,造成内存溢出
优点:很⽅便实现增删改操作
sax⽅式解析
采⽤事件驱动,边读边解析,从上到下,⼀⾏⼀⾏的解析,解析到某⼀个对象,返回对象名称
缺点:不能实现增删改操作
优点:如果⽂件过⼤,不会造成内存溢出,⽅便实现查询操作
想要解析xml,⾸先需要解析器
不同的公司和组织提供了针对dom和sax⽅式的解析器,通过api⽅式提供
sun公司提供了针对dom和sax解析器 jaxp
dom4j组织:dom4j            jdom组织:jdom
19 jaxp的api查看
jaxp是javase的⼀部分
jaxp解析器在jdk的l.parseers包⾥⾯
四个类:分贝针对dom和sax解析使⽤的类
dom:  DocumentBuilder :解析器类 这个类是⼀个抽象类 不能new 此类的实例
取DocumentBuilderFactory获取实例
parse(”xml路径“) 返回的是Document整个⽂档 返回的docunment是⼀个接⼝,⽗节点是Node,如果在docunment不到⽅法,可以到Node去
在document⾥⾯的⽅法
getElementsByTagName(String tagname)  这个⽅法可以得到标签 返回集合NodeList
createElement(String tagname)  创建标签
createTextNode(String data) 创建⽂本
appendChild(Node newChild) 把⽂本添加到标签下⾯
removeChild(Node oldChild) 删除节点
getParentNode() 获取⽗节点
NodeList    ⽅法: getLength() 可以得到集合的长度 item(int index) 下标取到具体的值
sax:  SAXParser:解析器类  SAXParseFactory:解析器⼯⼚
20 使⽤jaxp实现查询操作
查询xml中所有的name元素的值
* 1 创建解析器⼯⼚ DocumentBuilderFactory builderFactory = wInstance();
* 2 根据解析器⼯⼚创建解析器 DocumentBuilder builder = wDocumentBuilder();
* 3 解析xml返回document Document document = builder.parse("l");
* 4 得到所有的name元素
21 使⽤jaxp添加节点
在第⼀个标签下⾯添加⼀个节点
步骤:
*1 创建解析器⼯⼚ 2 根据解析器⼯⼚创建解析器 3 解析xml返回document
* 4 得到第⼀个标签 使⽤item⽅法
* 5 创建sex标签createElement
* 6 创建⽂本createTextNode
* 7 把⽂本添加到sex下⾯appChild
* 8 把sex添加到第⼀标签下⾯
* 9 回写xml
回写代码:TransformerFactory transformerFactory = wInstance();
Transformer transformer = wTransformer();
22 使⽤jaxp修改节点

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。