1.什么是xml: XML指可扩展标记语言,设计宗旨是传输数据,而非显示数据,其焦点是数据的内容,
XML标签没有被预定义,需自行定义标签,XML被设计为具有自我描述性,XML语法严格。
2.xml的用处: 数据存储,配置文件,数据传输。
3.基本语法:
文档声明:(必须写在文档的第一行) <?xml version="1.0" encoding="UTF-8"?>
规则:所有XML元素都必须有关闭标签,对大小写敏感,必须正确地嵌套,文档必须有根元素
     属性值必须加引号。
实体引用:&lt;(小于), &gt;(大于), &amp;(&号), &apos;(单引号), &quot;(双引号)
元素:名称可以含字母,数字以及其他字符,但不能以数字、标点符或者xml开始,名称不能包含空格。
文本:<![CDATA[ 里面的数据不会解析,会原样显示 ]]>   
4.xml约束: 规定文档当中只能写哪些标签,并且会给一些提示。
DTD约束:内部dtd,在xml当中定义的dtd,但是不推荐使用。
        外部dtd,在外部文件当中单独定义的dtd <!DOCTYPE 名称 SYSTEM "***.dtd">(本地)
                <!DOCTYPE 名称 PUBLIC "命名空间" "***.dtd">(网络)
DTD语法:<!ELEMENT web-app (servlet*,servlet-mapping*,wel-file-lis?)>
    <!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
    <!ELEMENT servlet-name (#PCDATA)> (里面存放的必须是文本)
    <!ELEMENT welcome-file-list (welcome-file+)>
    括号里面的必须按顺序出现,*代表出现任意次,?最多出现一次,|两者必须出现一次,
    +代表至少有一个,没有*、?、|、+等符号的必须出现一次。
学习要求:不要求自己写出来,能看懂就行。    
5.schema约束:编写根标签。
         引用约束地址  xsi:schemaLocation="默认空间 约束地址.xsd"
  (固定格式)引用实例名称空间 xmlns:xsi="http://www.w3.org/2001/XMLSchema"
         默认名称空间  xmlns="默认空间"    
schema语法:复杂标签:标签当中还有子标签。  简单标签:标签当中没有子标签。 type:别名。
想用的话得在标签中加上 xsi:schemaLocation="http://www.example.org/student student.xsd"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema"
              xmlns="http://www.example.org/student"
6.xml解析:
文档结构:XML采用树状结构。 用结点的方式来表示整个xml。
     结点:文档结点(xml文件),元素结点(使用<>的标签),
          属性结点(元素上属性名="属性值"),文本结点(元素之间的内容)。
7.DOM解析:
什么是DOM:文档对象模型,把文档中的成员描述成一个个对象。
       使用Java代码操作XML 或者 js代码操作HTML。
DOM解析特点:在加载的时候,一次性的把整个XML文档加载进内存,在内存中形成一棵树。
        以后用代码操作Document,其实内存中的DOM树,与本地磁盘的XML无关。
        由于操作的是内存当中的dom,需要进行同步。
        缺点:若XML文件过大,可能造成内存溢出。
DOM解析(查询)步骤:创建解析器工厂,
               通过解析器工厂得到解析器,
               通过解析器得到document对象,
               获取具体的结点内容。
        //1.创建解析器工厂,
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        
        //2.通过解析器工厂得到解析器,
        DocumentBuilder db = dbf.newDocumentBuilder();
        
        //3.通过解析器得到document对象,
        Document doc = db.parse("src/Test.xml");
    
        //4.获取具体的结点内容。
        NodeList list = doc.getElementsByTagName("name");
        Node name = list.item(1);
        System.out.println(name.getTextContent());
8.DOM修改元素:  获取所有指定结点
         获取要修改的结点
        修改元素内容
        从内存写到文档做同步操作

9.DOM添加元素:  创建一个结点
        设置元素内容
        获取要添加元素的父结点
        添加结点
        从内存写到文档做同步操作

10.DOM删除元素: 获取一个结点
        获取该结点的父结点,从父结点当中移除
        从内存写到文档做同步操作

11.添加元素属性:获取要添加属性的结点
        把获取的结点强制转换成element
        设置属性
        从内存写到文档做同步操作

12.DOM4J: DOM4J是dom4j.org出品的一个开源XML解析包
       dom4j是一个十分优秀的JavaXML API,具有性能优异,功能强大和极其易使用的特点,
它的性能超过sun公司官方的dom技术,同时,它也是开放源代码的软件。
       已经是必须使用的jar包,Hibernate用它来读写配置文件。

13.DOM4J获取所有指定标签内容:
        创建SAXReader
        获取根元素
        根据名称获取根元素下所有的标签
        遍历每一个子元素
        获取指定名称的元素
        获取标签当中的文本

14.DOM4J添加元素:
        创建SAXReader
        获取根元素
        给根元素添加元素和属性,并返回添加的元素
        读写