许志安继续跳舞专辑:传智播客:xml入门以及解析xml文件 - habernate的日志 - 网易博客

来源:百度文库 编辑:九乡新闻网 时间:2024/10/05 22:47:10

传智播客:xml入门以及解析xml文件

java 2009-05-17 10:52:23 阅读15 评论0   字号: 订阅

D:文档 – html 文档 或 xml 文档

        O:对象 – document 对象的属性和方法

        M:模型

        DOM 是针对XML的基于树的API。

        DOM树:节点(node)的层次。

        DOM 把一个文档表示为一棵家谱树(父,子,兄弟)

        DOM定义了Node的接口以及许多种节点类型来表示XML节点的

  多个方面.

 

l       文档声明:

        在一个完整的XML文档中必须包含一个XML文档声明,该声明必须位于文档的第一行。这个声明表示该文档是一个XML文档,以及遵循的是哪个XML版本的规范。最简单的XML文档声明语法如下:

   

        可通过在XML文档声明中指定encoding属性来说明该XML文档所使用的字符编码方式:

   

        encoding属性默认的设置是Unicode编码,如果文档中的字符是以UTF-8或者是UTF-16作为编码,则可以不设置这个属性。

 

l       元素和属性

        XML 文档的主体由元素组成。一个XML元素由一个标记来定义,包括开始和结束标记以及其中的内容

        没有嵌套在其他元素内的元素叫做根元素

        若元素中没有嵌套子元素和数据,这样的元素叫做空元素

        所有的标记都必须有结束标记或者使用空元素的结束说明

        XML 中不允许使用标签交叉来破坏文档的结构化层次关系

        XML标记名称区分大小写

        XML标记名称中不能包括空格

        可以为 XML 标签设置属性,XML中的属性也可以随便定义。一个标签可以有多个属性,每个属性都有名称和取值

        XML 中属性值一定要用双引号或单引号引起来

 

l       注释

        在 XML 文档中可以加入注释来为 XML 文档添加附加信息,注释会被程序忽略。语法如下:

  

        因为 XML 必须作为XML文档的第一行,所以不要把注释放在 XML 声明之前

        XML 中的注释不能嵌套使用

 

 

l       在XML中,空格和换行将作为原始内容被处理

 

 

l       CDATA 区:

        CDATA 区指的是不想被解析程序解析的一片原始数据区,以””结束。

l       特殊字符: 在 XML 中有些特殊字符需要转义字符序列表示其原始字面意义:

比如我们希望在xml中写入如下内容:

l       SELECT * FROM a WHERE a.salary<100.这里的“<”会被xml解析器当作关键字进行解析,这个时候可以把这个<”用处理,告诉编译器,不对这里面的内容进行解析

 

下面代码是获得一个xml文档中元素结构

              //1. 得到 xml 文档对应的 Document 对象

              //1.1 创建 SAXReader 对象

              SAXReader saxReader = new SAXReader();

             

              //1.2 调用 SAXReader 对象的 read() 方法读取 xml, 得到 Document 对象

              File file = new File("E:\\java\\090515\\dom4j\\customers.xml");

              Document document = saxReader.read(file);

              //2. 得到 xml 文档的根元素

              Element root = document.getRootElement();

              System.out.println("<" + root.getName() + ">");

              //3. 得到根节点的所有子节点

              List elements = root.elements();

              //4. 对 3 得到的 List 进行遍历

              for(Element ele : elements){

                     System.out.print("\t<" + ele.getName() + " ");

                     //得到 customer 节点第一个属性对象

                     Attribute attr = ele.attribute(0);

                     System.out.print(attr.getName() + "='" + attr.getValue() + "'");

                     System.out.println(">");

                     //5. 得到每个 customer 节点的所有子节点

                     List eles = ele.elements();

                     for(Element e : eles){

                            System.out.print("\t\t<" + e.getName() + ">");

                            //6. 得到 customer 每个子节点的值

                            String value = e.getText();

                            System.out.print(value);

                            System.out.println("");

                     }

                     System.out.println("\t");

              }

              System.out.println("");