XML

1.    什么是XML?

XML:可拓展标记语言(Extensible Markup Language)

 

本质上就是一个纯文本文件,内部采用:标记+数据的形式,使数据更加有层次感

<book>存储信息</book>

 

xml文件的设计宗旨是传输数据,常常用作配置文件,很少为了存储数据的目的而使用.

 

存储大量数据时,可读性可维护性非常好

 

2.    为什么xml

 

xml文件的设计宗旨是传输数据

 

xml存储大量数据时, 内部采用:标记+数据的形式,使数据更加有层次感,可读性可维护性非常好,

 

所以,xml在java中常常用作配置文件,很少为了存储数据的目的而使用.   1).做配置文件【以后常用】:Tomcat容器、SSM框架底层采用的都是xml做配置文件;

 

3.    xml和html文件的区别

 

xml是w3c的推荐标准

 

         先有鸡还是先有蛋?HTML是由SGML改进生成的,随后才有的XML,时至今日,XML仍然被广泛应用,纵使json的出现减少了xml的使用

 

         借鉴别人的一句话,

         json用20%的时间做了80%的事情,而它也就只能完成这80%的事情;xml用120%的时间做了100%的事情

 

HTML文件本质上也是xml文件(html文件去掉头文件,将单标签加上结束符号使得符合html5标准,就是一个正确的可以被dom4j解析” XML”文件)

 

html被设计用来显示数据,xml被设计用来传输数据

 

xml被设计为传输和存储数据,其焦点是数据的内容

 

 

4.    XML语法概述

4.xml就是纯文本文件,<标签名>+数据+<标签名/>

 

4.2xml文档的整体结构包含

 

文档声明:声明文档版本和编码

                    1.1版本不兼容1.0,一般使用1.0版本

标签 :        是xml文件中的重要内容,其实就是给内容起个名字

属性:  任何标签都可以定义若干个属性

注释: 和html文档一样,注释使用<!--  -->

转义字符:对于在xml文件中有特殊语义的字符,需要进行转义才能显示

CDATA:如果存储大量需要对字符进行转义的内容,一般放到CDATA区内,CDATA区内的内容不需要转义

 

 

 

5.    xml文档声明

xml文档声明可有可无

一个xml文档建议编写文档声明

文档声明的作用:给xml的编辑器或者解析器看的,不会显示

3).语法说明:

        1).<?xml  声明内容  ?>

        2).只有两个属性:

            1).version :xml版本号,只能写:"1.0"或者"1.1",目前使用"1.0";

            2).encoding : 此xml文件中使用的编码,如果包含中文:UTF-8

    4).其它说明:

        1).文档声明不是必须的(建议写),如果没有,不影响显示和解析;

        2).如果写文档声明,一个文档中只能有一个文档声明;

        3).如果写文档声明,必须位于此文档的0行0列的位置,前面不能有空行、空格、注释

 

6.    xml标签

 

    1).元素(标签):是XML文档中重要的内容。它其实就是对数据起的一个名字

    2).元素名称:由程序员自由定义

    3).元素的分类:

        1).完整标签:<name>张三</name>

        2).单标签:<br/>

    4).元素的命名规则:

        1).只能包含一些字符(包括中文),数字_,-,:,.

        2).不能以:数字、-、.开头。

        3).不能包含:空格

 

7.xml属性

1).任何的元素(完整标签,单标签)都可以定义若干的属性

        <property name="driverClass">com.mysql.jdbc.Driver</property>

    2).属性定义格式:

        1).必须定义在开始标签中。

        2).每个属性:属性名 = 。"值"必须用一对单引号或者双引号括起来。

        3).多个属性之间使用空格隔开。

        4).多个属性,不能有同名的。

 

8.xml注释

 

1).跟HTML一样:<!-- 注释内容 -->

    2).注意书写的位置:

        1).不能文档声明前面;

        2).不能写在标签内部:

            <student <!--学员信息-->>

            </student>

        3).不能嵌套:

            <!--

                <!-- 内容 -->

            -->

 

9.xml转义字符

 

1).为什么要用转义字符:

            <code> a < b </code><!--编译错误-->

       如果我们的数据中,包含了一些XML的格式符号,将会引起编译错误:

       这时,可以使用转义字符

    2).转义字符:

< &lt; 小于

> &gt; 大于

" &quot; 双引号

' &apos; 单引号

& &amp; 和号

3).例如:

<code>

     String str = "jfkw28392fjkls";

     int count = 0;

     for(int i = 0;i < str.length() ; i++){

         char c = str.charAt(i);

         if(c >= '0' && c <= '9'){

             count++;

         }

     }

     System.out.println("count = " + count);

</code>

需要转义

<code>

     String str = &quot;jfkw28392fjkls&quot;;

     int count = 0;

     for(int i = 0;i &lt; str.length() ; i++){

         char c = str.charAt(i);

         if(c &gt;= &apos;0&apos; &amp;&amp; c &lt;= &apos;9&apos;){

             count++;

         }

     }

     System.out.println(&quot;count = &quot; + count);

</code>

 

 

10.xml  CDATA区

 

1).如果标签内容中包含了大量需要转义的字符,使用大量的转义字符后,会使可读性下降,也不容易编写,

       所以可以使用:CDATA区:

    2).例如:  

<code>

     <![CDATA[ <!--内部所有的内容全部作为数据解析 -->

      String str = "jfkw28392fjkls";

      int count = 0;

      for(int i = 0;i < str.length() ; i++){

          char c = str.charAt(i);

          if(c >= '0' && c <= '9'){

              count++;

          }

      }

      System.out.println("count = " + count);

  ]]>

</code>

 

 

解析xml

 

1.XML_XML解析_DOM_SAX_PULL_三种解析方式介绍

   1).DOM解析:将每个元素以及内容分别封装为对象,并且设置关联,最终在内存中保留了整个文档的结构。

             好处:会在内存中保留整体文档的结构,可以对元素进行:删除、添加。

             缺点:将文档的所有内容全部加装到内存,比较耗内存。

    2).SAX解析:逐行解析,没有上下文的概念。

             优点:快

             缺点:内部没有结构的顺序关系,不能对元素进行:删除、添加。

    3).PULL解析:Android内部使用解析方式。

2.XML_XML解析_几种解析工具介绍

    1).JAXP:Java类库提供的对XML的最基本的解析类库,可以使用SAX,也可以使用DOM解析。操作起来比较困难。

    2).JDom:跟dom4j相似,但不常用。

    3).jsoup:对HTML解析。项目中会讲解;

    4).Dom4j : 全世界比较出名的解析工具。内部采用:DOM + SAX。Hibernate框架内部采用的就是dom4j。

           

3.XML_XML解析_XML解析原理及DOM模型:

    1).XML的解析工具如果DOM方式解析,会根据XML文档中的标签结构,生成:DOM树(dom模型).

 

4.XML_XML解析_dom4j的使用步骤_常用类和方法【重点】

    1).dom4j是第三方开发包,所以需要将第三方jar包复制到项目下。

    2).常用类:

        1).SAXReader

        2).Document(dom树)

        3).Element(元素)

    3).常用方法:【Element的常用方法】

        1).public List elements():获取当前元素下所有的子元素

        2).public List elements(String tagName):获取当前元素下所有的tagName名称的子元素

        3).public String getName():获取标签名

        4).public String getText():获取标签的值

        5).public String elementText(String subTagName):获取当前元素的subTagName子元素的值。

        6).public String attributeValue(String attName):获取当前元素的"attName"属性的值。

       

5.XML_XML解析_dom4j结合XPath解析XML

    1).之前使用dom4j解析,必须从根节点开始,如果要解析多层(4-5层以上)的标记,就非常麻烦,所以又提出了XPath的解析方式:

    2).使用步骤:dom4j也支持XPath解析。

        1).创建SAXReader对象

        2).读取XML文件,生成document对象;

        3).两个常用方法:

            List selectNodes("路径");获取多个元素

            Node selectSingleNode("路径"):获取单个元素

        4).路径:

            1)."/根节点/子节点/孙节点":

            2)."//任意节点/子节点"

            3)."//节点[@属性名 = 值]

 

 

 

xml约束

 

1.XML_约束的概念_含义_作用【重点】

    1).xml中的标记是由我们程序自己定义的,当我们为某个应用设计出一个xml文档时,这个文档中可以出现哪些标签,基本已经固定了。如果不做任何限制,是可以添加任何标签的,但这不符合我们的业务要求。

    2).所以:XML又提出一个概念:对XML文档进行约束;

        可以:

        1).XML文档中可以出现哪些标签;

        2).这些的标签的前后顺序;

        3).这些标签的出现次数;

        4).这些标签有哪些属性?哪些必须的?什么类型的值?

        ...

    3).XML约束有两种:

        1).DTD约束:比较简单,对中、小型的xml文件进行约束。

        2).Schema约束:比较复杂,对大型的xml文件进行约束。可以详细的约束到数据类型

 

不添加任何约束

 

编写dtd约束

<?xml version="1.0" encoding="utf-8" ?>
<!ELEMENT books (book+)>
<!ELEMENT book (name,author,sale)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT sale (#PCDATA)>

 

添加dtd约束结果:

 

 

添加Schema约束

<?xml version="1.0" encoding="UTF-8" ?>

<!--

  将注释中的以下内容复制到要编写的xml的声明下面

   复制内容如下:

   <书架 xmlns="http://www.itcast.cn"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://www.itcast.cn bookshelf.xsd"

    >

 -->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

           targetNamespace="http://www.itcast.cn"

           elementFormDefault="qualified">

        <xs:element name='books' >

                <xs:complexType>

                        <xs:sequence maxOccurs='unbounded' >

                                <xs:element name='书' >

                                        <xs:complexType>

                                                <xs:sequence>

                                                     <xs:element name='书名' type='xs:string' />

                                                     <xs:element name='作者' type='xs:string' />

                                                     <xs:element name='售价' type='xs:double' />

                                                </xs:sequence>

                                        </xs:complexType>

                                </xs:element>

                        </xs:sequence>

                </xs:complexType>

        </xs:element>

</xs:schema>

 




设置约束

 

代码:

<?xml version="1.0" encoding="UTF-8"?>

<books
    xmlns="http://www.itcast.cn"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.itcast.cn bookshelf.xsd"
>
    <book>
        <name></name>
        <author></author>
        <sale></sale>
    </book>
</books>

 

posted @ 2019-05-23 10:51  爱华顿g  阅读(248)  评论(0编辑  收藏  举报