1,什么是xml?(extensible  可扩展的标记语言)
          1)是一种基于文本的通用的数据保存格式
                a,数据保存格式
                    比如,要保存一个点的坐标(x=10,y=20)
                               使用xml:
                                     <point>
                                       <x>10</x>
                                       <y>20</y>
                                     </point>
                b,通用
                     比如一个Point对象,要将高对象包含的数据永久保存下来,可以有如下几种方式:
                       方式一:序列化
                       方式二:数据库表
                       方式三:文件
                      序列化不通用,因为序列化是java特有的技术,如果一个java程序将数据以序列化
                   方式保存下来,则其他语言无法读取序列化格式的文件,文件也如此。
                     使用xml来保存这个点的坐标,所有语言都能够识别。
            2)历史
                   html,也是一种标记语言, 由 博纳斯·李(互联网之父)发明。   www(万维网联盟)
                   html可以很方便地制作网页,这些网页由浏览器去解析,生成相应的界面。浏览器实质
               就是一个html解析器,遵循万维网联盟制定的html规范,比如html4.0规范
                   html有一个缺陷,标记是不能够扩展的,xml也是一种标记语言,不同的是其标记可以
               扩展。由html扩展而形成。
                  
   2,xml语法
           1)元素
                  a,什么是元素?
                       把标记与标记之间的内容统称为元素。
                  b,每个元素必须有开始标记和结束标记。
                  c, 允许有空元素。<data></data>
                           空元素可以简化为<data/>
                  d,元素可以嵌套。
                  e,只允许有一个根元素。
                  f,元素可以有属性,属性必须要放在开始标记里面。<point type="normal" color="yellow"></>
                 g, 大小写敏感的。
           2)属性
                a,什么是属性?
                     属性一般用来描述元素的特性
                 b,属性必须要放在开始标记里面,并且属性值要用引号括起来。
          3)实体
                a,什么是实体?
                       一些特殊的字符,比如: >,<,&,',"在xml当中有特殊的含义,如果要把这些字符作为
                   元素的内容。必须要使用相应的实体来代替。
                 b,常见的实体
                        &gt;       >
                        &lt;         <
                        &amp ;   &
                        &apos ;   '
                        &quot  ;   "  
           4) CDATA
                  <![CDATA[   需要浏览器忽略的所有的字符     ]]>
        注意:xml要先声明: <?xml version ="1.0" encoding="utf-8"?>
   3,xml解析   //www.apache.org    //sourceforge.org  //github.com
            sun公司本身也提供了一些用来解析xml的API,比如sax,dom等,不过这些过于底层
        编程起来比较麻烦。我们一般使用封装好的,比如:dom4j,digest等。
        用dom4j来做解析
         1)将一个java对象转换成一个xml
                step1,设计好用来保存数据的xml文档的格式
                step2.,在内存当中,构建一个树结构
                step3,将内存当中树结构保存的数据输出
                            //在内存当中构造树刚开始只是一个空树,没有任何节点
           Document doc=DocumentHelper.createDocument();
          //为这个树添加一个根节点
          Element root=doc.addElement("point");
          root.addAttribute("x", point.getX()+"");              //添加属性
          Element xElement=root.addElement("x");        //添加枝叶   
          Element yElement=root.addElement("y");
          xElement.setText(point.getX()+"");                     // 添加元素        
          yElement.setText(point.getY()+"");  
          OutputStream ops=new FileOutputStream("./point.xml");
          OutputFormat format=OutputFormat.createPrettyPrint();
          XMLWriter writer=new XMLWriter(ops,format);
          writer.write(doc);
          ops.close();
         2)将xml转换成java对象
                 step1,将xml文档的内容读入到内存(dom4j会自动将xml文档的内容转换成一棵树)。
       step2, 访问树的节点,获得数据,然后创建相应的java对象。
                      InputStream ips=new FileInputStream("./point.xml");
            SAXReader reader=new SAXReader();
            Document doc =reader.read(ips);
            Element root=doc.getRootElement();
           // root.attribute("x").getValue();
           // root.attributeValue("x");
            Point p=new Point();
            p.setType(root.attributeValue("type"));
            p.setX(Integer.parseInt(root.elementText("x")));
            p.setY(Integer.parseInt(root.elementText("y")));
            System.out.println(p);
                              ips.close();