黑马程序员技术交流社区

标题: 【石家庄校区】XML [打印本页]

作者: 水煮牛蛙    时间: 2018-5-21 17:06
标题: 【石家庄校区】XML
本帖最后由 小石姐姐 于 2018-5-23 16:50 编辑

XML

#什么是XML?
        * XML 指可扩展标记语言(EXtensible Markup Language)
        * XML 是一种标记语言,很类似 HTML
        * XML 被设计用来描述数据
        * XML 标签没有被预定义。您需要自行定义标签。
        * XML 使用文件类型声明(DTD)或者 XML Schema 来描述数据。
        * 带有 DTD 或者 XML Schema 的 XML 被设计为具有自我描述性。
        * XML 是一个 W3C 标准
#xml的作用:
        * 传输 和 存取数据.
        * 软件的配置文件.
        ** 以前作为数据交换的文件,现在主要最为程序的配置文件        
1.XML的基本语法:
        * 允许用户自定义标签
        * XML必须有关闭标签
        * 区分大小写
        * 属性必须加引号
        * 标签必须正确嵌套
        * 文档必须有根元素
2.XML的文档声明
        * 文档声明:通常出现在XML的第一行第一列的位置!!!(定格位置);
                ** 写法:
                        <?xml 属性名="属性值" 属性名="属性值"?>
                        *** version : 必须的, 使用"1.0"        
                        *** encoding: 字符集,是使用浏览器打开的时候才用的默认的字符集的编码;
                        *** standalone:描述XML文档是否需要依赖其它的文件(基本不用);
                        **** 例:
                                 * <?xml version="1.0" encoding="UTF-8"?>
                                 * 在eclipse中新建xml文档时就会自动添加声明
3.xml的注释
        <!-- XML的注释 -->
4.XML的元素
        * 元素(标签)的命名规范:        
                **名字可包含字母、数字以及其他的字符
                **名字不能以数字或者标点符号开始
                **名字不能以字符“xml”(或者XML、Xml)开始
                **名字不能包含空格
                **名称不能包含冒号


5.在XML中有5个预定义的实体引用:
        < < 小于
        > > 大于
        & & 和号
        ' ' 省略号
        " " 引号
6. CDATA的作用: 在它的内容中可以正常的写特殊字符,不需实体引用
         <![CDATA[  内容  ]]>
        * 原因:
                **所有 XML 文档中的文本均会被解析器解析。只有 CDATA 区
                  段 CDATA section)中的文本会被解析器忽略.




7.XML的解析的方式有哪几种?(*****):(面试题)
        * 两种 : DOM,SAX
        * DOM解析:DOM:Document Object Model.
        * SAX解析:Simple Api for XML.
        * DOM和SAX的区别:
                ** DOM:一次性将文档加载到内存,形成树形结构进行解析
                   缺点:如果文档特别大,容易导致内存的溢出
                   优点:对XML进行增删改的操作
                ** SAX: 事件驱动的方式,一行一行进行解析的
                        缺点:不能对文档进行增删改的操作
                        优点:如果文档特别大,不会导致内存的溢出.
8.针对这两种解析的方式,不同的公司提供了不同的API的实现.(xml解析工具)
        #下面这些技术中都有DOM和SAX的解析
        * JAXP                :SUN公司提供的一套XML的解析的API.(针对DOM和SAX都有不同的API);
        * JDOM                :开源组织提供了一套XML的解析的API-jdom.
        * DOM4J                :开源组织提供了一套XML的解析的API-dom4j.
        * pull                :主要应用在Android手机端解析XML.
9.DOM4J的入门案例步骤:
        #使用DOM4j解析文档
        * 【步骤一】导入jar包.dom4j-1.6.1.jar  (它的核心包)
        * 【步骤二】创建解析器(1.SAXReader  2.DOMReader 两种,一般使用saxreader)
                                SAXReader reader = new SAXReader();
        * 【步骤三】解析文档获得代表文档的Document对象.
                                ** 整个文档加载到内存后就可称为是一个Document对象
                                Document document = reader.read("xml/demo1.xml");
                                //传入文件路径
        * 【步骤四】获得跟节点.
                                Element root = document.getRootElement();
                                System.out.print(root.getName());//输出跟结点名
        * 【步骤五】从跟节点下查找其他的节点.
                                //element()
                                //elements()
                                Element pElement = root.element("person");//查找的是第一个person元素
                                root.elements("person").get(1); // 查找的是第二个person元素
                                Element nElement = pElement.element("name");//查找person下的name元素
                                System.out.println(nElement.getText());//输出name元素中的文本
        * sun公司通的API只支持上边的这些功能,使用起来比较麻烦
        * 使用XPath就比较方方便了,DOM4j也支持它


9.2.SAXReader 其实是结合了DOM和SAX两种解析(都有使用);
9.3.dom4j也有增删改的功能,但一般不适用,因为现在数据都放在数据库中,
        如果使用的话查帮助文档就行.
9.4它的增删该操作,操作的只是内存中的数据,如果想保存的话,就要报数据保存村到文档,
        * 有两种数据到文档的格式:
        ** 一: 美化格式 :将格式调的特别漂亮.
        ** 二: 缩减格式 :传输数据用,对文档进行了压缩,去掉了多余的空格
10.XPath
        10.1使用XPath的前提是你正在使用的解析xml文档的API支持XPath
        * dom4j支持XPath的jar包.
                * jaxen-1.1-beta-6.jar
        * dom4j的XPath支持的API: (只有这两个方法支持xpath)
                * List document.selectNodes(String xPath);
                * Node document.selectSingleNode(String xPath);
        10.2XPath的使用步骤
                * 1. 导入dom4j支持XPath的jar包,jaxen-1.1-beta-6.jar
                * 2. 创建解析器
                                SAXReader reader = new SAXReader();
                * 3.获取Document对象
                                Documert document = reader.read("xml/demo1");
                * 4.调用xpath方法查询标签
                                //获取所有的name 元素
                                List<Node> list = document.selectNodes("//name");
                                //获取当个元素
                                
        10.3简单语法:(具体查看xpath帮助文档)
                        * 单斜杠/ 描述层级关系
                        * 双斜杆// 表示不分层级,所有层级
                        * 中括号 [@属性] 表示具有该属性的元素
        10.4.parse
        SAXParseException(解析异常)


11.XML的约束
        #一共两种约束:
                * DTD      .dtd 后缀的文件
                * Schema   .xsd 后缀的文件 / 也可是 .xml 后缀
                        ** Schema约束文档是通过命名空间中w3c区分的
                                *** w3c名称空间不带instance的为约束文档
                                *** w3c名称空间带-instance的为被约束的文档


        11.1XML的约束的概述:
                * 什么是XML的约束:
                        ** 就是用来约束XML的文档中可以出现哪些标签,
                           不能出现哪些标签,标签中是否有顺序,出现的次数.
                * XML的约束作用:
                        ** 用来规范XML的写法.
        11.2XML的约束的种类及区别?
                * DTD 和 Schema        :
        * 区别:
             1.DTD语法是自成一体的.Schema语法就是XML的语法.
             2.Schema的语法就是XML的语法所以更容易被解析器所解析.
             3.Schema支持名称空间.
             4.Schema有比DTD更加强大的语义和语法的约束.
                                * DTD只能约束内容是不是字符串和出现次数;
                                * Schema 还可以约束整型,flout,double,以及整型
                                  数出现的范围(例如:将年龄设置为1-120之间)
                                * DTD中存的都是字符串
        11.2.1.DTD(文档类型定义)的作用是:
                * 定义 XML 文档的合法构建模块。
        11.2.2.Schema (.xsd)结尾的文档
                * 是基于 XML 的 DTD 替代者。
                * XML Schema 描述 XML 文档的结构。
                * XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
                * 它使用一系列的合法元素来定义文档结构。
        11.3.DTD的语法        :(了解)    (.dtd)结尾的文档
                11.3.1.DTD的引入方式:(约束文档,被约束文档,加入约束的方式)
                * 内部的DTD:
                        <!DOCTYPE persons [
                        
                        ]>
               
                 * 外部的DTD:
                         * 一种本地DTD:
                                <!DOCTYPE persons SYSTEM "unknown.dtd">
                         * 一种网络DTD: 例如: 一些框架,已经将DTD发部到了网站上,使用时只需要写上网址就行.
                                <!DOCTYPE persons PUBLIC "//UNKNOWN/" "unknown.dtd">
                                        ** //UNKNOWN/ 为dtd的名称
                                        ** "unknown.dtd" 为dtd所在的网络路径
                11.3.2.DTD的语法:
                         * 元素:
                                 * <!ELEMENT 元素名 元素类型>
                                         * 元素类型:
                                                 * EMPTY  空
                                                 * ANY            任意
                                                 * 子元素  
                                                         * 是否有序: 使用 逗号(,)或者竖线(|)表示. (逗号表示有序,竖线表示或者)
                                                         * 出现的次数:?:零次或一次 +:一次或多次 *:零次或多次
                                                 * PCDATA   :可解析的字符数组(如果元素内就是文本,那写PCDATA就行了)
                         * 属性:
                                * <!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
                                        * 属性的类型:
                                                * ID类型:表示属性值需要是唯一的.
                                                * CDATA类型:普通的字符串.
                                                * 枚举:
                                        * 属性的约束:        
                                                1. #REQUIRED         属性值是必需的
                                                2. #IMPLIED         属性不是必需的
                                                3. #FIXED value 属性值是固定的


12.Schame约束
        12.1Schame 的名称空间:
        <!--
    * 名称空间:一个XML只能引入一个DTD约束文档.使用了Schema约束XML文档,
                     一个XML可以引入多个Schame的约束!!!
    * 如果再多个Schema文档中定义了相同的属性名称 该怎么办?
      ** 名称空间类似于java中的package.通过名称空间区分 标签或属性来
                 自于哪个文档的!!!通常名称空间唯一的不重复的即可.一般情况下使
                 用一个URL地址表示一个名称空间;
          ** 给名称空间取一个别名,在标签上加上空间别名,用于区分使用的是哪个空间的约束;
      
        xmlns                                :xml name sapace .代表当前的文档应用的名称空间.
        targetNameSpace                :目标名称空间.
        elementFormDefault        :有两个参数 1. qualified 质量好的:父标签加了名称空间,子标签也要加
                                                                        2. unqualified 质量不好的:父标签加了子标签就不用加了
                                                                        * 一般使用qualified 结构清晰
        -->
               


        12.2.一个xml可以引入多个名称空间,每个名称空间都定义了一些约束,
                因此每个名称空间要取一个别名;






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2