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转义字符

* 转义字符

    * <    &lt;

    * >    &gt;

    * &    &amp;

    * "    &quot;

    * '    &apos;

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()]   

    * @        代表属性   

推荐阅读更多精彩内容

  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,092评论 1 7
  • 前言 好久没有写博客了,换了工作,才发现入坑(即使大公司也想选择自己喜欢且合适的部门啊,不是BAT就一定牛逼的)。...
    Peter潘的博客阅读 3,508评论 0 7
  • 感觉简书越来越没有意思了,给人感觉越来越差,不是写cs博客的地方。 DTD(document type defin...
    律令法师阅读 655评论 0 3
  • 1. XML总结 1.1. XML简介 XML : 可扩展的标记语言。(和HTML非常类似的) 可扩展的。 自定义...
    Ethan_Walker阅读 2,040评论 0 12
  • 故事一(德育的重要) 有一道测试题,从下面3个候选人中选出一位能造福人类的,你会选谁?第一个,他信巫医和占,有两个...
    芊然阅读 520评论 0 0
  • 月换新勾知上下, 云塑万形藏风雨。 形似月, 心如云, 云淡月明朗。 智明万象识今古, 慧扫万物存经络。 增长智,...
    hsl_7cbf阅读 114评论 0 0
  • 昨夜里怕是姨妈来临前夕,暴风疼痛席卷肉肉的肚子,半夜跑去厕所折腾了半天终于在3:49分重新睡回到床上。早晨原本说要...
    绿萝白日梦阅读 182评论 0 2