xml是一种通用的数据交换的格式,为实现计算机之间的文档交换而设计的文档内容编写规范,语法与HTML相似.XML的作用:统一信息的结构,实现不同系统之间的相互通信
目前许多系统的配置文件都使用XML格式,例如现在流行的SSH框架的配置文件都用的是xml的格式,配置文件就是记录应用程序的配置信息的文件。XML 是一种标记语言,通过使用标记来说明文本的意义和所代表的信息。XML 没有固定的标记,允许用户随便发明和创建自己的标记。XML文档是树形结构的。以下是xml基本语法的注意事项,下面将用个正确的例子做为参考!元素和属性:
1.XML 文档的主体由元素组成。一个XML元素由一个标记来定义,包括开始和结束标记以及其中的内容
2.没有嵌套在其他元素内的元素叫做根元素
3.若元素中没有嵌套子元素和数据,这样的元素叫做空元素
4.所有的标记都必须有结束标记或者使用空元素的结束说明
5.XML 中不允许使用标签交叉来破坏文档的结构化层次关系
6.XML标记名称区分大小写
7.XML标记名称中不能包括空格
8.可以为 XML 标签设置属性,XML中的属性也可以随便定义。一个标签可以有多个属性,每个属性都有名称和取值
9.XML 中属性值一定要用双引号或单引号引起来
例题:<?xml version="1.0" encoding="UTF-8"?>
<customers>
<customer id="101" sex="man">
<name>Tom</name>
<age>12</age>
<email>tom@sina.com</email>
</customer>
<customer id="102" sex="women">
<name>Jerry</name>
<age>22</age>
<email>jerry@sohu.com</email>
</customer>
</customers>
现在再来介绍下DOM4J,我初开始看到这个名词的时候,把它读成了“动物世界”,呵,其实这个读法是错误的,4只能读成four!佟老师说,这样才算专业的!不过再说DOM4J自己前先介绍下xml的四种解析技术与比较:
1.DOM:DOM 解析器把 XML 文档转化为一个包含其内容的树,并能够对树进行遍历。用 DOM 解析模型的长处是编程容易,能够很容易的添加和修改树中的元素。然而由于使用 DOM 解析器的时候需要处理整个 XML 文档,所以对性能和内存的需要比较高,尤其是碰到很大的 XML 文档的时候。
2.SAX:SAX 解析器采用了基于事件的模型(在解析 XML 文档的时候能够触发一系列的事件,当发现给定的tag的时候,他能够激活一个回调方法,告诉该方法定制的标签已找到)。因为他让程序员自己来决定所要处理的tag,所以当只需要处理文档中所包含的部分数据时,SAX 有良好的表现。但用 SAX 解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。
3.JDOM:JDOM的目的是成为 Java 特定文档模型,他简化和 XML 的交互并且比使用 DOM 实现更快。
4.DOM4J:DOM4J 是很优秀的Java XML API,具备性能优异、功能强大和极端易用使用的特点,同时他也是个开放源代码的软件。如今越来越多的 Java 软件都在使用 DOM4J 来读写 XML
以上可以看出DOM4J解析技术的巨大优势了!
Document对象相关
1.读取XML文件,获得document对象.
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
2.解析XML形式的文本,得到document对象.
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
3.主动创建document对象.
Document document = DocumentHelper.createDocument(); //创建根节点
Element root = document.addElement("members");
节点相关
1.获取文档的根节点.
Element rootElm = document.getRootElement();
2.取得某节点的单个子节点.
//"member"是节点名
Element memberElm=root.element("member");
3.取得节点的文字
String text=memberElm.getText();
也可以:
//这个是取得根节点下的name字节点的文字.
String text=root.elementText("name");
4.取得某节点下名为"member"的所有字节点并进行遍历.
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}
5.对某节点下的所有子节点进行遍历.
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
// do something
}
6.在某节点下添加子节点.Element ageElm = newMemberElm.addElement("age");
7.设置节点文字.ageElm.setText("29");
8.删除某节点.//childElm是待删除的节点,parentElm是其父节点
parentElm.remove(childElm);
9.添加一个CDATA节点.
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
属性相关
1.取得某节点下的某属性 Element root=document.getRootElement(); //属性名name
Attribute attribute=root.attribute("size");
2.取得属性的文字 String text=attribute.getText();
也可以://这个是取得根节点下name字节点的属性firstname的值.
String text2=root.element("name").attributeValue("firstname");
3.遍历某节点的所有属性 Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();
it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text); }
4.设置某节点的属性和文字. newMemberElm.addAttribute("name", "sitinspring");
5.设置属性的文字. Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
6.删除某属性 //属性名name
Attribute attribute=root.attribute("size"); root.remove(attribute);
将文档写入XML文件
1.文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
2.文档中含有中文,设置编码格式写入的形式.OutputFormat format = OutputFormat.createPrettyPrint();// 指定XML编码
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();
以上是今天上课的主要内容,具体的例题见:Dom4j解析xml(二)