D:文档 – html 文档 或 xml 文档
O:对象 – document 对象的属性和方法
M:模型
DOM 是针对XML的基于树的API。
DOM树:节点(node)的层次。
DOM 把一个文档表示为一棵家谱树(父,子,兄弟)
DOM定义了Node的接口以及许多种节点类型来表示XML节点的
多个方面.
l 文档声明:
在一个完整的XML文档中必须包含一个XML文档声明,该声明必须位于文档的第一行。这个声明表示该文档是一个XML文档,以及遵循的是哪个XML版本的规范。最简单的XML文档声明语法如下:
<?xml version="1.0" ?>
可通过在XML文档声明中指定encoding属性来说明该XML文档所使用的字符编码方式:
<?xml version="1.0" encoding="GB2312" ?>
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 区指的是不想被解析程序解析的一片原始数据区,以”<![CDATA[” 开始,以”]]>”结束。
l 特殊字符: 在 XML 中有些特殊字符需要转义字符序列表示其原始字面意义:
比如我们希望在xml中写入如下内容:
l SELECT * FROM a WHERE a.salary<100.这里的“<”会被xml解析器当作关键字进行解析,这个时候可以把这个<”用<![CDATA[<]]>处理,告诉编译器,不对这里面的内容进行解析
下面代码是获得一个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<Element> 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<Element> 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("</" + e.getName() + ">");
}
System.out.println("\t</" + ele.getName() + ">");
}
System.out.println("</" + root.getName() + ">");