1 XML 2 * extensible Markup Languae :可扩展标记型语言 3 ** 标记型语言:html是标记型语言 4 - 也是使用标签来操作 5 ** 可扩展: 6 - html里面的标签是固定的,每个标签都有特定的含义<h1><br/><hr/> 7 - 标签可以自定义,可以写中文的标签<person></persn> <猫></猫> 8 * xml用途 9 ** html适用于显示数据,xml也可以显示数据(不是主要功能) 10 ** xml只要功能,为了存储数据 11 12 * xml是w3c组织发布的技术 13 * xml有两个版本:1.0 1.1 14 -使用1.0版本:(1.1版本不能向下兼容)。 15 * xml的应用 16 * 不同的系统之间传输 17 ** qq之间数据传输 18 * 用来表示生活中有关系的数据 19 * 经常用在来配置文件 20 21 * xml语法 22 (1)xml的文档声明 23 * 创建文件,后缀为.xml 24 * 如果写xml 第一步必须要有一个文档声明(写了文档声明之后,表示写xml文件) 25 ** <?xml version="1.0" encoding="GBK"?> 26 ** 文档声明必须写 第一行 第一列 27 * 属性 28 - version: xml的版本1.0(使用1.0) 29 - encoding:xml编码 gbk utf-8 iso8859-1(不包含中文) 30 - standalone: 是否需要依赖其他文件 yes/no 31 - xml的中文乱码 计算机默认保存时gbk 自己定义时utf-8就会乱码 应该在保存时改掉计算机默认为设置的编码 32 (2)定义元素(标签) 33 (3)定义属性 34 (4)特殊字符 35 (5)注释 36 (6)CDATA区 37 (7)PI指令 38 5*xml的元素定义: 39 ** 标签定义: 40 ** 有开始有结束<person></person> 41 ** 可以再内部结束<person /> 42 ** 标签可以嵌套,必须要合理: 43 ** 合理嵌套<bb><aa></aa></bb> 44 ** 只能有一个根标签,其他的都是子标签 45 ** 空格和内容都会解析:不能写空格 46 ** xml标签可以使中文 47 48 ** xml中标签的名称规则 49 (1)xml代码区分大小写 50 (2)xml的标签不能以xml开头 51 (3)xml不能以数字下划线开头 52 (4)xml不能包含空格和冒号 53 54 * xml照片那个特殊字符 55 ** 小于号:< 56 ** 大于号:> 57 ** 双引号:" 58 ** 单引号:&apos 59 ** & :& 60 61 * CDATA区: 62 ** 可以解决多个字符都需要专一的操作 63 ** 把这些内容放在CDATA中不需要转义; 64 ** 写法:就是把特殊字符当成文本内容显示出来 65 ** <![CDATA][内容]]> 66 67 * PI指令(处理指令) 只对应为标签起做用 68 ** 可以再xml中设置效果 69 ** 导入css写法: <?xml-stylesheet type="text/css" href="路径" ?> 70 71 * xml约束: 72 ** 一个dad约束 一个schema约束 73 *** dtd快速入门 74 * 创建文件 后缀: .dtd 75 * 步骤; 76 * 有多少元素 就在dtd中创建几个<!ELEMENT> 77 * 判断元素是简单元素还是复杂元素 78 - 简单元素:没有子元素 79 <!ELEMENT 元素名称(#PCDATA) > 80 - 复杂元素:有子元素的元素 81 <!ELEMENT 元素名称(子元素名称) > 82 * 将dtd引入xml中方法 83 * <!DOCTYPE 元素名称 SYSTEM "dtd路径"> 84 ** dad三种引入方式; 85 (1) 引入外部dtd文件 86 <!DOCTYPE 元素名称 SYSTEM "路径"> 87 (2) 内不直接写; 88 <!DOCTYPE 元素名称 [ 89 - 简单元素:没有子元素 90 <!ELEMENT 元素名称(#PCDATA) > 91 - 复杂元素:有子元素的元素 92 <!ELEMENT 元素名称(子元素名称) > 93 94 ]> 95 (3) 使用外部dtd文件(网络上的) 96 <!DOCTYPE 根元素 PUBLIC "DTD名称" "dtd文档路径URL"> 97 在后面学到的 框架中 struts2中学到 使用配置文件用 98 * 使用dtd定义元素 99 *简单元素:没有子元素的元素 100 <!ELEMENT name (#PCDATA)> 101 *** (#PCDATA);约束那么是字符串类型 102 *** EMTY: 元素为空 (没有内容) 103 *** ANY:任意 104 * 复杂元素: 105 <!ELEMENT person (name,age)> 106 -子元素只能出现一次 107 ** 表示元素出现的次数; 108 +: 表示一次或多次 109 ?: 表示零次或一次 110 *: 表示出现任意次数 (有没有都行) 111 **子元素之间用 , 号隔开,表示元素出现的顺序. 112 **子元素之间用 | 号隔开,表示元素出现的顺序. 113 114 * 使用dtd定义属性 115 * 语法: <ATTLIST 元素名称 116 属性名称 属性类型 属性的约束 117 > 118 * 属性类型 119 - CDATA :字符串 120 - <!ATTLIST birthday 121 ID1 CDATA #REQUIRED 122 > 123 - 枚举: 表示只能在一定的范围内出现值,但是只能每次出现其中一个. 124 ** 红绿灯效果 125 ** (aa|bb|cc) 126 - <!ATTLIST age 127 ID2 (AA|BB|CC) #REQUIRED 128 > 129 ID :值只能是字母或者下划线开头 130 * 属性的约束 <!ELEMENT ><age ID="DDD">20</age> 131 - #REQUIRED ;表示必须有 132 - #IMPLIED;表示可有可无 133 - #FIXED :表示一个固定值, #FIXED "AAA" 134 - 属性的值必须是设置的这个固定值 135 - <!ATTLIST sex 136 ID4 CDATA #FIXED "ABC" 137 > 138 - 直接值: 139 * 不写属性,使用直接值 140 * 写了属性,使用设置那个值 141 -<!ATTLIST school 142 ID5 CDATA "DDD" 143 > 144 * 定义实体: 145 * 语法: <!ENTITY 实体名称 "实体的值"> 146 ** 定义实体<!ENTITY TEST "HAHAHA"> 147 ** 使用实体 &实体名称; 比如: &TEXT; 148 149 ** 特别注意: 150 * 定义的实体需要写在内部的dtd里面 151 152 * schema约束: 153 ** dtd语法: <!ELEMENT 元素名称 约束> 154 ** schema符合xml的语法,xml语句: 155 ** 一个xml中可以有多个schema,多个schema使用名称空间来区分(类似于java中的包) 156 ** dtd里面有PCDATA类型.但是schema里面可以支持更多的数据类型 157 *** 比如 年龄 只能是整数 在schema可以直接定义一个整数类型 158 **语法更加复杂,所以schema目前不能替换dtd. 159 * schema的快速入门 160 *后缀名为 .xsd 161 * 创建一个schema文件 162 ** 根节点就是<schema> 163 * 在schema文件中 164 ** 属性 xmlns="http://www.w3.org/2001/XMLSchema" 165 - 表示当前xml问价是一个约束文件' 166 ** targetNmaespace="http://www.itcast/cn/20151111" 167 - 使用schema约束文件,直接通过这个地址引入约束文件 168 ** elementFormDefault="qualified" 169 * 步骤: 170 (1) 看xml中有多少元素 171 <element> 172 (2) 看简单元素和复杂元素 173 - 复杂元素; 174 ** <complexType> 175 <sequence> 176 子元素 177 </sequence> 178 </complexType> 179 - 简单元素,卸载复杂元素的中间 180 <element name="person"> 181 <complexType> 182 <sequence> 183 <element name="name" type="string"></element> 184 <element age="age" type="int"></element> 185 </sequence> 186 </complexType> 187 </element> 188 (3) 在约束文件里面引入约束文件 189 <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 190 xmlns="http://www.itcast.cn/20151111" 191 xis:schemaLocation="http://www.itcast.cn/20151111 1.xsd"> 192 193 **解释: 194 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 195 - 表示xml是一个被约束的文件 196 xmlns="http://www.itcast.cn/20151111" 197 - 是约束文档里面targetNmaespace 198 xis:schemaLocation="http://www.itcast.cn/20151111 1.xsd" 199 - targetNmaespace+空格+约束文档的地址 200 * schema复杂元素指示器 201 * <sequence>:表示元素的出现顺序 202 * <all> 元素只能出现一次 203 * maxOccurs="unbounded":表示元素的出现次数 204 * <any></any>:表示任意元素 205 * 可以约束属性 206 * 写在复杂元素里面; 207 * 写在 <complexType>之前 208 --- 209 <attribute name="id1" type="int" use="required"> 210 -- name :属性名称 211 -- type: 属性类型 int string 212 -- use :属性是否必须出现 required 213 214 215 216 * XML解析简介(写java代码)*** 217 * xml是表机型文档 218 * 就是使用dom解析表机型文档 219 - 根据html的层级结构,在内存中分配一个树形结构.把html的标签,属性和文本都封装成对象. 220 - document对象,element对象.属性对象.node节点对象; 221 * xml的解析就是dom和sax方法 222 * dom层级结构解析,在内存中分配一个树形结构,吧xml的标签,属性文本都会封装成对象. 223 优点:可以增删改操作 224 缺点:文件过大时会内存溢出 225 * sax一行一行从上往下边读边解析: 226 优点:不会内存溢出. 227 缺点:不能增删改. 228 ** 不同的公司对dom和sax技术用不同的解析器: 229 - sun公司提供的是dom和sax解析器: jaxp 230 - dom4j组织,针对dom和sax解析器: dom4j(经常用) 231 - jdom组织,针对dom和sax解析器: jdom 232 233 234 * jaxp的api的查看;java代码 不能使用var了 使用的是w3才包 235 ** jaxp是Javase的一部分 236 ** jaxp解析器在jdk的javax.xml.parsers包里面 237 ** 四个类; 分别是针对dom和sax解析使用类 238 document:操作: 239 查询: 240 步骤: 241 1.创建解析器工厂 242 2.根据解析器工厂创建解析器 243 3.解析xml,返回document 244 4.得到所有neam元素 245 5.使用返回集合里面的方法item(),下标获取具体元素 246 NodeList.item(i);集合下标i从0开始 247 6.得到具体的值,使用getTextContent方法