XML文档
课程内容:XML
安装MyEclipse开发工具
* 安装MyEclipse,先去安装JDK,配置环境变量。安装的目录不要有中文。
* 破解(看图)
* 配置
* 配置工作空间的编码(UTF-8编码)。window -- preferences -- 搜索workspace -- 修改UTF-8编码。(必须配置)
* 创建WEB的项目(web project)
* 在WebRoot目录下,创建HTML的文件。右键 -- others -- 搜索HTML -- 选择HTML的基本模板。
* 如果创建HTML的编码,不是UTF-8的编码,就需要配置。-- window -- preferences -- 搜索HTML -- 选择创建时是UTF-8编码。
onsubmit事件
* 在<form>,提交的按钮 <input type="submit"> 提交表单。
* 在做表单提交之前,完成表单的校验的操作。 (onblur事件 onfocus事件)
完成onsubmit事件的操作
* 1.先编写HTML的注册的页面。action指定了提交的地址。成功页面。
* 2.编写onsubmit事件(对表单完成校验:如果不符合我的要求,不能让表单去提交)
* 2.1 onsubmit需要作用在<form>表单。
* 2.2 onsubmit="return run()"
* 2.3 run()方法有要求,必须有返回值,并且返回值要么是true,要么是false。如果false,表单就不能提交。如果true就可 以提交。(默认就是true)
js的RegExp对象
* 声明变量
* var reg = new RegExp("表达式");
* var reg = /表达式/;
* 注意:var reg = /^表达式$/;(准确的)(用的比较多)
* 方法
* reg.exec("字符串") 返回值:如果匹配成功了,返回匹配成功的内容。
* reg.test("字符串") 返回值:如果匹配成功了,返回true。如果失败返回false。(记住)
XML语言学习
* 和HTML对比的学
XML的简介
* XML:可扩展标记语言。
* 可扩展:HTML的标签预先定义,但是XML语言自定义。<abc num="10">文本内容</abc>
* XML的版本:XML1.0(使用) 和 XML1.1(不向下兼容)
* XML可以解决的问题
* 生活中遇到有关系的数据
* XML的常见的应用:
* XML可以保存数据。(小型的数据库) <name>张三</name>
* XML文件可以作为框架的配置文件(*****)
* XML文件可以在系统与系统之间进行数据的传输
<name>张三</name>
<desc>交完钱了</desc>
* 例子:新浪天气预报的接口(用XML提供数据)(WebService)
XML的语法(和HTML像的)
XML文档声明
* 文档声明(重要)
* XML的文件的后缀名:.xml结尾的。
* 说明文档声明必须要有的。需要出现在XML文件中的第一行,第一列位置。
* <?xml version="1.0" encoding="UTF-8" ?>
* 文档声明的属性
* version="1.0" XML的版本(属性必须有的)
* encoding="UTF-8" 打开XML文件时的编码(可选的,必须有的)
* standalone="yes/no" 代表XML的文档是否是独立的?如果yes,说明独立,不需要引入外部的文件。如果no,不是独立,可以引入外部的文件。(如果不指定的话,也没有问题)
* 乱码问题:会伴随你们一生的。(看图)
* 如果产生乱码:保存文件时和打开文件时采用的编码不一致。乱码。
* 解决问题:只需要保证保存文件时和打开文件编码一致就ok了。
* 注意:如果使用MyEclipse,不会产生乱码。
XML定义元素
* 定义元素 例子:<abc></abc>
* XML的元素(标签)有开始和结束(结束的标签不能省略)。
* 结束标签包含标签主体和不包含标签主体
* 包含:<abc>文本内容</abc>
* 不包含:<abc/>
* 标签必须要合理的嵌套。 错误的:<abc><xxx>ss</abc></xxx>
* XML的文档有且仅有一个根节点。
* 命名规范
* 区分大小写 <P></p>
* 不能以中划线(-)和数字开头。
* 不能以(XML xml Xml)开头
* 不能包含空格和冒号。
XML定义属性
* 定义属性
* 属性值的写法:必须要使用引号(双引号或者单引号)。
* 属性名称的命名规范和元素是相同。
* 元素上不能有相同名称的属性。 <abc name="" name="">
XML注释
* 注释
* 和HTML的注释是一样的 <!-- XML的注释 -->
* XML的注释不能嵌套
XML转义字符
* 转义字符
* < <
* > >
* & &
* " "
* ' '
XML的CDATA区
* CDATA区
* 作用:把使用CDATA内容转换成文本内容。
* 写法:
<![CDATA[
内容:把内容作为文本内容。
]]>
XML的PI(了解)
* PI(处理指令 忘了)
* 指挥软件如何来解析XML的内容。
* XML替换HTML。XHTML
XML的语法总结
* 所有XML元素必须有结束标签。<abc></abc> <abc/>
* XML元素区分大小写的。
* XML文档有且只有一个根节点。
* 属性的值必须使用引号(双引号和单引号)(要求大家使用双引号)
* 可以使用CDATA区特殊字符进行转义
XML的约束
* 为什么要使用约束:XML自定义的标签。
开发框架:myspring 配置文件。
<beans>
<bean>cn.itcast.xxxx</bean>
<abc>cn.itcast.xxxx</abc>
<abc>cn.itcast.xxxx</abc>
</beans>
* 格式良好的XML:遵循XML语法结构的XML。
* 有效的XML:有个约束文档来约束XML的文档,在XML文档中编写的标签都是符合约束文档的。
DTD的约束
* DTD约束的入门步骤:
* 先可以编写一个XML的文档(被约束)。
* 编写DTD的约束文件(约束XML文档的)
1. 创建DTD的文件
2. DTD文件里面想约束哪些元素?定义元素。语法:<!ELEMENT 元素名称 元素类型>
3. 判断当前的元素是复杂元素还是简单元素?
3.1 如果简单元素(中间出现字符串) -- <!ELEMENT 元素名称 (#PCDATA)>
3.2 如果复杂元素(包含子节点) -- <!ELEMENT 元素名称 (子节点1,子节点2...)>
4.定义属性
5.定义实体
6. 在XML的文档中引入DTD文件(三种)
4.1 引入本地的DTD文件 -- <!DOCTYPE 根节点名称 SYSTEM "DTD文件的地址" >
* XML与DTD三种关联方式
1. 引入本地低DTD文件 -- <!DOCTYPE 根节点名称 SYSTEM "DTD文件的地址" >
2. 在XML文件中直接书写DTD代码 -- <!DOCTYPE 根节点名称 [ DTD的代码 ] >
3. 引入外部的文件的方式,因为网络的DTD文件(例子:Struts2)
3.1 <!DOCTYPE 根节点 PUBLIC "DTD文件的名称" "DTD文件的地址" >
DTD的语法
定义元素
1. 关键字 <!ELEMENT 元素名称 元素类型>
2. 元素类型:
* (#PCDATA) 可解析字符数据(字符串)
* (子节点) 复杂元素,编写子节点
* EMPTY 空(没有括号,必须都是大写的)
* ANY 任意(没有括号,必须都是大写的)
3. 子节点:当前元素下面出现的子节点
* 子节点之间的关系
* , 代表子节点的出现是有顺序的。
* | 代表子节点的出现是或的关系(任选其一)
* 子节点出现的次数
* + 代表子节点出现的次数是1次或多次
* * 代表子节点出现的次数是0次或多次(包含1次)任意次
* ? 代表子节点出现的次数是0次或1次
定义属性
1. 关键字(Attribute List)
<!ATTLIST 元素名称
属性名称 属性类型 属性约束
属性名称 属性类型 属性约束
>
2. 编写属性 <!ATTLIST 书 出版社 CDATA #REQUIRED>
3. 属性类型
* CDATA 字符数据(字符串)
* 枚举(没有关键字) 写法:(值1|值2) 代表在值1或者值2中只能选择一个。
* ID 代表就是唯一的值。
4. 属性约束
* #REQUIRED :代表属性必须出现
* #IMPLIED :代表属性出现是可选的
* #FIXED :固定值 写法:#FIXED "值"
* 默认值 :代表默认值 "值"
定义实体(了解)
* 关键字 <!ENTITY 别名 "值" > 定义实体。
* 作用:可以在XML文件中来引入别名。
* 引入实体: &别名;
DTD文档
* W3C的文档
schema约束(明天)
XML的解析(XML的CRUD)
XML的解析方式
* 问题:XML的解析方式有哪些?(DOM和SAX的区别)
* 答:XML的解析方式有很多,主要是两种DOM和SAX。
* DOM和SAX的区别:
* DOM解析方式:把XML文档全部加载到内存中,形成树状结构。
* 缺点:如果文档过大,容易产生内存溢出问题。
* 优点:可以做增删改的操作。
* SAX解析方式:边读边解析,基于事件驱动。
* 优点:不会产生产生内存溢出的问题。
* 缺点:不能做增删改的操作,查询速度非常快。
* 支持DOM和SAX两种解析技术的开发包有哪些?
* SUN公司推出jar包。JAXP支持DOM和SAX的解析。(JDK -- 查看JDK的文档)
* DOM4J公司推出jar包(DOM4J.jar),支持DOM和SAX两种方式。(用的最多)
* JDOM公司推出jar,支持DOM和SAX两种方式。
XML的解析(代码)
* JAXP的DOM解析。
* 解析器的对象:来解析XML的文档(形成树状结构)。
开发的步骤
* 1. 获取DOM方式的解析器的工厂类(.newInstance() 实现类)
* 2. 通过工厂类,获取DOM的解析器对象。(.newDocumentBuilder()) 返回DocumentBuilder对象(DOM方式的解析器对象)
* 3. 可以解析XML的文档。(parse(String url))
* 4. 常常使用的(getElementsByTagName("元素名称"));
* 5. 返回NodeList集合。(getLength() item())
* 6. 通过Node接口方法来完成什么操作。
* 7. 回写步骤
1.先获取TransformerFactory工厂类
2.先获取Transformer,代表回写的类。
3.调用transform(源,目的地)来完成回写。
* 源:内存中document
* 目的地:需要把document写到XML文件中。指定一个XML的文件。
解析作者标签的文本内容
/**
* 目的:获取解析器对象,可以解析XML文档,就可以获取Document对象。
* 1.先获取解析器的工厂类
* 2.就可以获取解析器对象
* 3.就可以解析XML的文档,获取Document对象
* 4.获取作者的标签
*/
// 获取解析器工厂类
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 获取解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 可以解析XML文档
Document document = builder.parse("src/book2.xml");
// 获取作者的标签
NodeList nodeList = document.getElementsByTagName("作者");
// 循环遍历
for(int i=0;i<nodeList.getLength();i++){
// 获取每一个作者的标签
Node node = nodeList.item(i);
// 打印文本内容
System.out.println(node.getTextContent());
}
回写
1.先获取TransformerFactory工厂类
2.先获取Transformer,代表回写的类。
3.调用transform(源,目的地)来完成回写。
* 源:内存中document
* 目的地:需要把document写到XML文件中。指定一个XML的文件。
//xml加强
XML约束 schema约束(看懂)
* schme约束出现为了克服DTD约束的局限性。
* DTD的局限性
1. 只能引入一个DTD文件。(问题:如果有多个schema,该怎么解决问题?)
2. DTD的支持的数据类型比较少(只有字符串)。(schema支持更多的数据类型)
3. DTD语法解析
* schema约束和DTD约束的对比(面试题)
1. schema约束符合XML语法结构。
2. schema很容易被DOM或者SAX解析的技术解析。
3. schema对名称空间支持非常好的。
4. schema支持更多的数据类型,支持自定义数据类型。
* schema使用预先规定好的XML的元素和属性来创建的。
:特点的作用
* 预先规定的XML元素和属性是由W3C组织规定。
* schema约束的文档的后缀名(.xsd)
* schema约束文档也只有一个根节点,并且根节点名称就是,不能改变的。
package cn.itcast.vo;
public class User{
}
schema步骤
定义schema约束文档
* 根节点是不能改变。
* 引入W3C的名称空间,在根节点上使用xmlns=""(xml namespace)
* xmlns="http://www.w3.org/2001/XMLSchema"
* 定义元素
* 判断是否复杂还是简单元素
* 如果是简单元素:使用type=""(类型)
* 如果是复杂元素:
* 先需要声明我是一个复杂的元素 :声明是复杂元素
* 规定子节点的关系 随便 :有顺序的
* 起自己schema的名称空间
* 需要在根节点使用属性(targetNamespace)起名称
* 写法:URI http://www.itcast.in/0108
* elementFormDefault:属性:来决定book.xml文件中的写法。
* unqualified :质量不好的
* qualified(使用它) :质量好的
* 定义属性
*
* 位置:需要放在标签的中间
XML的引入schema文档
* 先引入W3C的名称空间,声明我是一个实例文档。
* xmlns="http://www.w3.org/2001/XMLSchema-instance" 实例文档
* xmlns="http://www.w3.org/2001/XMLSchema" 约束文档
* 引入自己的名称空间
* xmlns="http://www.itcast.in/0108"
* 元素标签的上有两个相同名称的属性
* 解决方案:起别名。
* 元素标签出现的概率小起别名
* 引入文件的地址的
* 引入文件的名称和地址
* xsi:schemaLocation
schema的名称空间(理解)
* 编写完了一个schema约束,需要给schema文档起名称空间。使用targetNamespace="唯一的值"
* 在schema文档中定义的元素和属性都在名称空间内有效。
* 想java的包。
* 在XML中引入的名称空间只能有一个默认的,默认的不用书写别名。
JAXP的SAX解析(查询功能,了解解析的原理)(必须会)
* JAXP(SUN公司提供的开发包)的SAX解析
* 一个有两个概念:解析器和事件处理器。
* 解析器:通过JAXP提供的api,创建解析器对象,就可以完成XML文档的解析。
* 事件处理器
* 编写一个类,继承DefaultHandler类,重写三个方法。
* 解析器再解析XML文档时,默认调用事件处理器的方法。
DOM4J的解析XML(必须会的)
了解DOM4J,看文档和api
* 第三方的jar包。不是由SUN提供,需要自己去下载响应的jar,导入到工程中。
* 需要把dom4j-1.6.1.jar导入到工程中。
* 导入到(WEB项目)工程中:复制jar包 -- 放在 WebRoot目录 -- WEB-INF目录 -- lib目录
* 查看文档
* 在dom4j-1.6.1 -- docs -- index.html的文档。打开该文档查看文档。
编写DOM4J代码
* 注意的实现
1.记住DOM4J的解析器的对象(SAXReader)
2.必须要获取根节点(document.getRootElement)
3.获取子节点必须是一级一级的获取。
DOM4J支持XPATH(语言)
* XPATH语言作用:很方便的来查询XML的节点。
* 解决问题:如果DOM4J的方式来解析XML,获取根节点,必须要有。
* 如果使用XPATH,可以省略该步。
* 如何来使用XPATH。
* 导入jar包。jaxen-1.1-beta-6.jar导入到工程中。
* 必须只能使用两个方法。(属于Node节点)
* List selectNodes(String xpathExpression)
* Node selectSingleNode(String xpathExpression)
* XPATH的语法
* /AAA /AAA/CCC 例子:selectNodes("/书架/书") 获取书架下的书的节点
* //BBB 无论层级关系 例子:selectNodes("//书") 获取所有的书的节点
* * 代表所有 例子:selectNodes("/书架/*")
* /AAA/BBB[1或者2或者last()]
* @ 代表属性