XML的基本知识点


XML的学习目标:
    能用XML描述现实中的有层次关系的数据
    能使用程序读取到XML中表示的数据(解析Parser)


1、XML是什么?做用是什么?
    一、XML是指可扩展标记语言(eXtensible Markup Language),用户自定义的标签.相对于HTML来说的。
    二、XML被设计的宗旨是表示数据。HTML是用来显示数据的。目前常用的XML版本是1.0
    三、XML除了表示数据外。在实际的企业开发中,主要用XML做为程序的配置文件。


2、XML的基本语法(组成)
    一、文档声明:
              做用:用于标识该文档是一个XML文档。
              注意事项:声明必须出如今文档的第一行(以前连空行/空格都不能有,也不能有任何的注释)


              最简单的XML声明:<?xml version="1.0"?>
              声明中的encoding属性:说明解析当前XML文档时所使用的编码。默认是UTF-8
              声明中的standalone属性:说明XML文档是不是独立而不依赖其余文档。(了解)




    二、元素:
              XML中出现的标签,分为包含标签主体和不包含标签主体,如:<p>哈哈</p>   <h/>
              一个标签能够嵌套若干标签,可是不容许交叉嵌套,必须合理嵌套
              结束标签不能省略
              一个XML文档必须且只能有一个根标签,其余标签都是该标签的子标签或孙标签
              XML文档中不会忽略回车和换行及空格
              标签的命名规范:元素(标签)的名称只能以字母或下划线开头,
                       能够包含字母、数字、减号、下划线和英文句点。严格区分大小写。


    三、元素的属性
              元素的属性取值必定要用引号引发来(单引号或双引号)
              标签属性所表明的信息也能够被改为用子元素的形式来描述,方便细度编程        


    四、注释
              与HTML中的注释彻底一致:<!--这是注释-->

              注释不能嵌套javascript


    五、CDATA区
              CDATA是Character Data的缩写。
              做用:CDATA区中的东东都是文本。
              语法:
                    <![CDATA[
                      文本内容
                    ]]>
          
    六、特殊字符
              & &amp;
              < &lt;   (less than)
              > &gt:(great than)
              " &quot;
              ' &apos;


    七、处理指令(PI:Processing Instruction)
            处理指令,简称PI(Processing Instruction)。
            做用:用来指挥软件如何解析XML文档。
            语法:必须以“<?”做为开头,以“?>”做为结尾。
            xml-stylesheet指令:  指示xml文档所使用的CSS样式或XSL, 注: 对中文命名的标签元素不起做用
                    如:  <?xml-stylesheet type="text/css" href="a.css"?>


3、XML的约束
            一、格式良好的XML文档:符合XML语法的。
            二、有效的XML文档:遵循约束规范的。
              格式良好的不必定是有效的,但有效的一定格式良好。
            三、经常使用的约束技术: XML DTD  和  XML Schema




4、DTD的基本语法(看懂便可)
            一、DTD:Document Type Definition
            二、做用:约束XML的书写规范。
            三、DTD文件保存到磁盘时,必须使用UTF-8编码


            四、如何引入外部的DTD文档来约束当前的XML文档
              DTD文件在本地:<!DOCTYPE 根元素名称 SYSTEM "DTD文件的路径">
                如:  <!DOCTYPE 书架 SYSTEM "book.dtd">
              DTD文件在网络上:<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD的路径URL">
                如:  <!DOCTYPE web-app PUBLIC
                        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                        "http://java.sun.com/dtd/web-app_2_3.dtd">


5、DTD的语法细节
            5.1定义元素
                    语法:<!ELEMENT 元素名称 使用规则>
                    使用规则:
                            (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
                            EMPTY:指示元素的不能有主体内容。
                            ANY:用于指示元素的主体内容为任意类型
                            (子元素):指示元素中包含的子元素
                                  若是子元素用逗号分开,说明必须按照声明顺序去编写XML文档
                                  若是子元素用“|”分开,说明任选其一。
                                  用+(>=1)、*(>=0)、?(0/1)来表示元素出现的次数,若是都没有,则只能且必须出现一次
                  
            5.2定义元素的属性(attribute)
                        语法:
                            <!ATTLIST 哪一个元素的属性
                                      属性名1 属性值类型 设置说明
                                      属性名2 属性值类型 设置说明>
                              
                              属性值类型:
                                      CDATA:说明该属性的取值为一个普通文本
                                      ENUMERATED (DTD没有此关键字):
                                        语法:<!ATTLIST 元素名称 (值1|值2) "值1">
                                      ID:属性的取值不能重复
                              设置说明:
                                      #REQUIRED:表示该属性必须出现
                                      #IMPLIED:属性无关紧要
                                      #FIXED:表示属性的取值为一个固定值 语法:#FIXED "固定值"
                                      直接值:表示属性的取值为该默认值
            5.3定义实体(了解)
                    关键字ENTITY
                          实体的定义分为引用实体和参数实体
                    
                    引用实体:
                          做用:在DTD中定义,在XML中使用
                          语法:<!ENTITY 实体名称 "实体内容">
                          在XML中使用:&实体名称;
                          例:
                              <!ENTITY copyright "你好啊">
                              &copyright;
                          
                    参数实体:
                          做用:在DTD中定义,在DTD中使用
                          语法:<!ENTITY % 实体名称 "实体内容">
                          在DTD中使用:%实体名称;
                          例:
                                <!ENTITY %  TAG_NAMES "姓名|EMAL|电话|地址">
                                <!ELEMENT  我的信息 (%TAG_NAMES;|生日)>


              例子:  book.dtd文件
                
                      <!ELEMENT 书架 (书+)>
                              <!ELEMENT 书 (书名,做者,售价)>
                              <!ELEMENT 书名 (#PCDATA)>
                              <!ELEMENT 做者 (#PCDATA)>
                              <!ELEMENT 售价 (#PCDATA)>
                              <!ATTLIST 书
                                        ISBN ID #REQUIRED
                                        出版社 (上海传智|北京传智) "上海传智">
                              <!ENTITY wzt "王昭珽">


                根据book.dtd约束规范写出的book.xml文档


                        <?xml version="1.0" encoding="GBK"?>
                        <!DOCTYPE 书架 SYSTEM "book.dtd">
                        <书架>
                                <书 ISBN="a" 出版社="北京传智">
                                        <书名>Java就业培训教程</书名>
                                        <做者>&wzt;</做者>
                                        <售价>39.00元</售价>
                                </书>
                                <书 ISBN="b">
                                        <书名>JavaScript网页开发</书名>
                                        <做者>&wzt;</做者>
                                        <售价>28.00元</售价>
                                </书>
                        </书架>


6、根据DTD可否对XML文档进行约束模式校验,能够将解析器分为俩类:
                  非校验解析器: 如IE
                  校验解析器: 建立一个html文本,拷贝以下代码,并导入要校验的xml文档便可
                        代码以下:
                                <script type="text/javascript">
                                        // 建立XML文档解析器对象
                                        var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
                                        // 开启XML校验
                                        xmldoc.validateOnParse="true";
                                        // 装载要检验的XML文档
                                        xmldoc.load("instance1.xml");
                                        // 获取错误信息
                                        var reson = xmldoc.parseError.reason;
                                        // 获取错误的行号
                                        var line = xmldoc.parseError.line;
                                        document.write(reson+"<br/>");
                                        document.write(line);
                                </script>

7、XML解析方式概述
              一、经常使用XML的解析方式:DOM和SAX
                            DOM:Document Object Model是W3C推荐使用的解析方式
                            SAX:Simple API for XML。非官方标准。
              二、经常使用解析开发包:
                            JAXP:SUN推出的实现,能进行DOM和SAX方式解析
                            Dom4J
                            JDom等
css


8、XML的编码问题html