首页 > 代码库 > xml
xml
xml
1、简介:可扩展标记型语言
标记型语言:html也是
- - 也是使用标签来操作
可扩展
- html里面的标签是固定的,每个标签都有特定的含义
- xml标签可以自己定义 可以写中文的标签
2、xml用途
html为了显示数据,xml也可以显示数据,但是最重要的是存储数据。
xml我w3c组织发布的技术。有2个版本:1.0和1.1 都使用1.0版本,1.1不能向下兼容。
3、xml的运用
-不同的系统之间传输数据 (比如QQ文件的传输)
-用来表示生活中有关系的数据 (比如国家下面的城市)
-经常用在文件配置
4、xml的语法
(1)xml的文档声明
-创建一个文件,后缀名是.xml
-如果写xml,第一步必须有一个文档声明(写了文档声明后,表示写xml文件的内容)
格式: <?xml version=”1.0” encoding=”gbk/utf-8”?> 注意空格,一定要有 文档声明必须写在第一行第一列
属性
-version:xml的版本1.0
-encoding:xml编码 gbk、utf-8、iso8859-1(不包含中文)
-standalone:是否需要依赖其他文件 yes/no 比较少用到
xml的中文乱码问题解决
设置保存时候的编码方式和打开时候的编码方式一致
(2)定义元素(标签)
和html的标签一样
在xml中会把空格和换行都当成内容来解析
命名规则
1、xml代码区分大小写
2、不能以数字或者下划线_开头
3、不能以xml开头(大小写都不可以)
4、不能包含空格和冒号:
(3)定义属性
命名规则与标签的命名规则是相同的
(4)注释
写法: <!—xml的注释-->
注释不能嵌套,也不能放到第一行第一列, 那个位置是放文档声明的位置
(5)特殊字符
<:< >:> 前面2个比较常用 ”:" ’:apos; &:&
(6)CDATA区 了解
可以解决多个特殊字符都需要转义的操作,就是把这些内容放在CDATA区里面,就不需要转义了
写法:<![CDATA[ 内容 ]]> 空格不用管
(7)PI指令(处理指令) 很少用
可以在xml中设置样式
写法:<?xml-stylesheet type=“text/css” href=http://www.mamicode.com/“css的路径”?>
设置样式,只能对英文标签名称起作用,对于中文标签名称不起作用
5、xml的约束
因为要符合常理,比如人有名字和年龄这些属性,但是不能有猫狗这些属性,所以需要进行约束
xml的约束的技术:dtd约束和schema约束
6、dtd约束的快速入门
步骤(1)、创建一个文件 后缀名是.dtd
(2)、看xml中有多少个元素,有几个元素,就写几个<!ELEMENT>
(3)、判断元素是简单元素还是复杂元素
-简单元素:没有子元素 <!ELEMENT 元素 (#PCDATA)>
-复杂元素:有子元素 <!ELEMENT 复杂元素 (子元素,子元素..)> 没有孙子辈的元素,只有儿子的元素
(4)、需要在xml文件中引入dtd文件
<!DOCTYPE 根元素名称 SYSTEM “dtd文件路径”>
myeclipse工具进行检验
ctrl+shift+/ 注释的快捷键
7、dtd的三种引入方式
(1) 外部引入方式
<!DOCTYPE 根元素名称 SYSTEM “dtd文件路径”>
(2) 使用内部的dtd文件 个人建议使用这个,就不用重新创建文件了
如-<!DOCTYPE 根元素名称 [
<!ELEMENT person (name,age)> 记得空格
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
(3) 使用外部的dtd文件(网络上的dtd文件)
<!DOCTYPE 根元素 PUBLIC “dtd名称” “dtd文件的路径”>
8、使用dtd定义元素
语法:<!ELEMENT 元素名 约束>
简单元素的约束
(#PCDATA):约束的内容是字符串类型
EMPTY:元素为空
ANY:元素为任意
复杂元素的约束
<!ELEMENT 复杂元素 (子元素)>
表示子元素出现的次数 这些符号是在子元素后面添加的
+:表示一次或者多次
?:表示0次或者1次
*:表示0次或者多次
子元素使用逗号,进行隔开 表示元素出现的顺序
子元素用|隔开 表示只能出现其中的任意一个
9、使用dtd定义属性
语法: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束>
属性名称随便写
属性类型
CDATA:字符串
枚举比如(aa|bb|cc):表示只能在一定的范围内出现,每次只能出现其中的一个 如
ID:值只能是字母或者下划线开头
属性的约束
#REQUIRED:属性必须存在
#IMPLIED:属性可有可无
#FIXED:表示一个固定值 比如 #FIXED “AAA” 那么属性值必须是“AAA”
直接值:如果不写属性,会使用直接值;如果写了属性,那么会使用属性的那个值
10、定义实体
语法: <!ENTITY 实体名称 “实体的值”>
比如 <!ENTITY test “haha”>
使用实体 &实体名称; 比如&test;
注意:定义实体需要写在内部dtd里面
11、xml的解析 重要
xml的解析方式(技术):dom和sax
dom解析xml的时候,如果文件过大,会造成内存溢出;但是可以实现增删改操作。
sax是边读边解析,所以不会造成内存溢出;但是不能实现增删改操作。
想要解析xml,需要解析工具:jaxp、dom4j(用得最多的)、jdom
-jaxp解析器在jdk的javax.xml.parsers包里面
一共4个类,分别针对dom和sax解析使用的类
dom:
-DocumentBuilder:解析器类
-这个类是一个抽象类,不能new,可以从DocumentBuilderFactory.new DocumentBuilder()方法获取
一个方法,可以解析xml:parse(“xml路径”),返回的是Document 整个文档
返回的Document是一个接口,父接口是Node
方法:js里面有的这里面都有 (getElementsByTagName返回的是NodeList)
NodeList里面的方法
getLength:得到数组的长度
item(int index):根据下标得到具体的值。
DocumentBuilderFactory:解析器类工厂
xml