XML知识点总结

1、XML 简介

XML是  :可扩展标志性语言( extendsible Markup Language) xml是w3c(万维网联盟,WEB技术最权威的国际中立性的技术标准机构)组织发布的技术

    xml 有两个版本 1.0 1.1,这里需要注意的是我们使用的是使用1.0 版本(1.1不能向下兼容)。

 先来解释一下这个可扩展标志性语言是什么意思:

       标记型语言 :html是标记型语言、使用标签操作。
       可扩展:html里的标签都是固定的,每个标签都有特定的含义, XML 不是固定的,标签可以自己定义, 比如可以写中文的标签<人></人> <person></person>
 既然我们要学习XML,就需要知道xml 的用途
        ** HTML 用以显示数据,XML也可以显示数据, 但不是主要功能
        ** XML 主要功能是存储数据
   
2、XML的应用

在实际开发中我们主要把XML实现如下的功能:

           不同系统之间传输数据,数据结构清晰,利于维护,用来表示生活中有关系的数据, 经常用在配置文件,比如现在连接数据库,肯定要知道数据库IP地址用户名密码等,直接    写程序中不好维护, 单独放在一个配置文件中利于维护


3、XML的语法

要学习会使用XML就必须得会下面几点。    

(1) xml的文档声明

   * 创建一个文件 后缀名是 .xml
   * 如果写xml ,第一步必须有一个文档声明(表示这是一个xml文档)
        
 <?xml version="1.0" encoding="utf-8"?>
    *** 文档声明必须是文档的第一行,并且是第一列

        关于头文件属性的解释:
            - version:xml的版本 1.0(文中使用的版本) 1.1
            - encoding: xml编码 gbk utf-8 iso8859-1(不包含中文) 等等 ,这个编码指定打开该文件时读取文件内容的编码,不是保存的编码

            - standalone:是否需要依赖其他文件yes/no


        * xml中文乱码的问题
            编辑好xml文件后->默认按系统编码保存,通常是gbk -> 然后打开xml的时候,打开程序(例如IE)根据xml文件的encoding编码去解码
            此时如果encoding 指定的编码跟保存时编码不一致,就会出问题,解决的办法是让保存时和打开时的编码都一致

(2) 定义元素(标签)

        ** 标签定义要符合如下的规定:
                      标签定义有开始必须要有结束:<person></person>
                      标签没有内容的可以在标签内结束<person value="as"/>
                      标签可以嵌套,但必须合理,例如下面这个例子:
                            合理:<a><b></b></a>

                            不合理: <a><b></a></b>

         ** xml标签命名规则
            (1) xml中区分大小写, <i>和<I>是两个不同标签
            (2) 标签名称不能以数字或下划线开头
            (3) 不能以xml 以及xml大小写开头,这是不允许的, <xmla> <Xmlb> <XMLx> 这些都是不允许
            (4) 标签名称不能包含空格和冒号 如 <a b> <a:b>都不对

         标签的定义还得注意以下几个:

        ** 一个xml中,只能有一个根标签,其他标签都是根标签下的标签

        ** 在xml中把换行和空格都当成内容来解析


         下面两段代码含义不一样
    
          <a>1111</a>
              <a>
                 1111
              </a>
(3) 定义属性
       上面已经说到xml是标记型文档,所以和HTML一样可以有属性,接下来我们就说如何定义属性:
     
<person id="aaa" />

        ** 属性定义的要求
            (1) 一个标签可以有多个属性,比如:<person id="aaa" xx="aaa"></person>
            (2) 属性名称不能相同
            (3) 属性名和属性值之间使用= ,属性值使用引号包起来(可以使单引号,也可以双引号)

            (4) 属性名称规范和元素规范一致


(4) 注释

        * XML注释的写法: <!--xml的注释-->
        ** 注意的地方
            *** 注释不能嵌套, <!--<!---->-->这个是错误的

            *** 注释不能放在文档的第一行,因为第一行是文档声明


(5) 特殊字符
        ** 特殊字符和html的特殊字符一样处理,这里也不过多说明了。

(6) CDATA 区
        这个的功能是可以解决多个字符需要转义的操作, 把这些内容放到CDATA区就不需要一个个转义了,这个也很少用到。
        ** 写法<![CDATA[内容]]>,如:<![CDATA[a<b , a>b]]>

        ** CDATA 区会把特殊字符当文本内容,而不是标签


(7) PI指令
       这个指令的功能是 可以在xml中设置样式
        * 写法: <?xml-styleheet type="text/css" href="css路径"?>
        注意:只对英文标签名称起作用
    
(8) xml的约束
        对元素严格规定,比如规定一个<persons>下面直接子节点只能是<person> 而不能是<猫>

        *约束技术 DTD 和schema,



4、DTD 快速入门 查看文档
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。这里我也不多说了,这个可以看文档的,可以看文档或者百度百科学习。
5、DTD的三种引入方式
    (1) 引入外部的dtd文件

        <!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">


    (2) 使用内部的DTD文件

        <!DOCTYPE 根元素名称 [
            <!ELEMENT person(name,age)>
            <!ELEMENT name(#PCDATA)> //表示在<name>和</name>标签之间可以插入字符或者子标签。
            <!ELEMENT age(#PCDATA)>
        ]>

        #PCDATA (Parsed Character Data 被解析的字符数据 任何)


    (3) 使用外部的dtd文件(网络上的dtd文件)
        <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

            "http://struts.apache.org/dtds/struts-2.0.dtd">


6、使用DTD定义元素

     DTD 语法:<!ELEMENT 元素名 约束>


     (1)简单元素没有子元素的元素

        简单元素结构如下     

       <!ELEMENT name (#PCDATA)>

      (#PCDATA) :表示在<name>和</name>标签之间可以插入字符或者子标签
      EMPTY:元素为空(没有内容)

       ANY : 任意


    (2)复杂元素

      复杂元素结构如下

        <!ELEMENT person (name,age,sex)> //注意空格

        <!ELEMENT 元素名称 (子元素)>
       用下列符号 表示子元素出现的次数:
            +:表示一次或多次
            ?:表示零次或一次
            *:表示零次或多次

        子元素之间用逗号隔开 表示元素出现的顺序,如:<!ELEMENT person (name+,age?,sex*)>

        子元素与出现次数之间用|隔开.表示元素只能出现其中的任意一个,如:<!ELEMENT person (name+|age?|sex*)>

7、使用DTD来定义属性

   定义属性语法: <!ATTLIST 元素名称  属性名称 属性类型 属性的约束 >

 

   而其中属性类型有三种

        - CDATA :字符串,如: <!ATTLIST person id1 CDATA #REQUIRED>

        - 枚举 :表示只在一定范围内出现的值,而且每次出现其中一个,如: <!ATTLIST person id1 (AA|BB|CC)  #REQUIRED>

       - 值只能是字母或者下划线开头,如:  <!ATTLIST person id1 ID  #REQUIRED>

    其中的属性的约束有三种
     -  #REQUIRED 必须要存在
     - #FIXED :表示一个固定值 #FIXED "AAA", 属性值必须是设置的固定值
     - 直接值 默认值
            不写属性 ,使用直接值
            写了属性,使用设置的那个值
           <!ATTLIST person id1 CDATA  "AAA">

8、实体的定义
  实体定义语法语法 :<!ENTITY 实体名称 "实体值">
    使用实体 &实体名称
   注意:定义的实体需要写在内部DTD中,如果写在外部DTD,某些浏览器下可能得不到

9、XML的解析(重要)
      我们都知道js使用DOM  -- document object model 来解析HTML
        - document 、element对象、属性对象、文本对象、Node节点对象
     xml 解析技术: dom 和 sax
        (1)dom解析
                根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性,文本都封装为对象
                缺点,如果文件过大会造成内存溢出
               优点 , 方便实现增删改操作
       (2)sax 解析
               采用事件驱动,边读边解析,从上到下,一行一行的解析
               缺点 :不能实现增删改操作
               优点 :如果文件过大,不会造成内存溢出,方便实现查询操作
    常用的解析器有Dom4j,提供dom和sax两种方式的解析器
     

10、schema约束     为替代DTD存在
    dtd语法 :<!ELEMENT 元素名称 约束>
  schema符合XML语法,是XML语句, 一个xml中可以有多个schema,多个schema用命名空间区分(类似JAVA的包名), dtd里有PCDATA类型,但是在schema中可以支持更多数据类型, 比如年龄 只能是整数 ,在schema中可以直接定义一个整型类型, schema语法更加复杂,目前还不能代替dtd

   schema的快速入门
       创建一个schema文件 后缀名是.xsd, 根节点<schema>
        
        在schema文件里面
           属性xmlns = "http://www.w3.org/2001/XMLSchema"; //表示你创建的是一个约束文档
           属性tagetNamespace = "http://www.chj.com/2014"; //命名空间,如果要使用约束文件,直接通过这个地址引入
            //当设置为unqualified时全局元素(可作为根元素)必须添加命名空间前缀,非全局元素不必添加前缀。
           属性elementFormDefault="qualified" // 当设置为qualified时,所有的元素都必须添加前缀。
        
        步骤
            (1)、看xml中有多少个元素  <ELEMENT>
            (2)、看简单元素和复杂元素
            
          <element name="person">
                    <complextype> //如果是复杂元素
                        <sequence>
                            <element name="name" type="string"></element>
                            <element name="age" type="intger"></element>
                        </sequence>
                    </cpmplextype>
                </element>


            (3)、在被约束的文件中引入约束文件
                  <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" //instance表示这是一个被约束的文件,两个xmlns所以这里要取个xsi作为前缀区分
                    xmlns="http://www.luowg.com/2014"//是约束文件里的 targetNamespace

                    xsi:schemaLocation="http://www.luowg.com/2014 xx.xsd">//targetNamespace 空格 约束文件的路径


阅读更多
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_18895659/article/details/51221725
所属专栏: Java程序员
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭