【文章标题】XML学习笔记(附上思维导图)
【文章作者】曾健生
【作者邮箱】[email protected]
【作者QQ】190678908
【作者博客】http://blog.csdn.net/newjueqi
http://newjueqi.iteye.com/
【编程环境】JDK 1.6.0_01
【作者声明】欢迎转载文章,但转载请保留文章的完整性以及注明文章的出处。
*******************************************************************************
XML现在被广泛应用于WEB开发,属性它的基本概念和基本操作(增,删,改,查)等具有重要的意义。
1. 了解什么是 格式良好 的 xml 文档. 知道 xml 的基本语法
a,文档声明必须在第一行
<?xml version="1.0" encoding="UTF-8"?>
b,XML标记名称区分大小写,标记名称不能包含空格。
c, XML空元素的表示:
1.<student></student>
2.<student/>
d, XML不允许标签交叉,如下是不允许的:
<customer>
<name >jim
<address>Beijing</name></address>
</customer>
e,XML属性值要用单引号或双引号包含起来
本文所用的XML:
<?xml version="1.0" encoding="UTF-8" ?>
- <customers>
- <customer id="001">
<name>Tom</name>
<age>13</age>
<email>[email protected]</email>
</customer>
- <customer id="002">
<name>Jerry</name>
<age>23</age>
<email>[email protected]</email>
</customer>
- <customer id="003">
<name>Bob</name>
<age>33</age>
<email>[email protected]</email>
</customer>
</customers>
2. 利用 Dom4j 读取 xml 文档.
2.1 得到 xml 文档代表的 Document 对象
//1.创建一个SAXReader对象
SAXReader reader=new SAXReader();
//创建一个XML文件的输入流
File f=new File("E:\\workspace\\dom4j\\customers.xml");
//创建一个文档对象
Document doc=reader.read( f );
2.2 熟悉 Element, Attribute, Node 等基本 API
//获取根节点
Element root=doc.getRootElement();
//获取根节点下的所有子节点的集合
List<Element> e1 =root.elements();
for( Element ele: e1 )
{
/*
通过子节点的方法
*/
//获取属性:ID值
Attribute attr=ele.attribute(0);
System.out.println( attr.getName()+" "+attr.getText());
//获取子节点的名称
System.out.println( ele.getName());
//获取子节点的值
System.out.println( ele.getText());
/*
* 通过 Attribute获取值
*/
System.out.println( ele.attributeValue("id"));//获取属性
System.out.println( ele.elementText("name"));//获取子节点的姓名值
System.out.println( ele.elementText("age"));//获取子节点的年龄值
}
2.3 使用 XPath 查找指定的节点
几个常用的:
Nodename:选取此节点的所有子节点
/:从根节点选取
//:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
@:选取属性
//title[@lang='eng']:选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性
/bookstore/book[price>35.00]:选取所有 bookstore 元素的 book 元素,且其中的 price 元素的值须大于 35.00
/*
* 使用XPath获取
*/
//获取name的值为"Tom"的节点
//Node node = doc.selectSingleNode( "//customer[name='"+"Tom"+"']" );
//获取id的值为"001"的节点
Node node = doc.selectSingleNode( "//customer[@id='"+"002"+"']" );
Element el=(Element) node;
System.out.println( el.attributeValue("id"));
3. XML文件的创建,增删操作
(1)XML文件的创建
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//1. 创建一个 Document 对象
Document document = null;
document = DocumentHelper.createDocument();
//2. 在 Document 对象下添加一个根节点: students
Element root = document.addElement("students");
//3. 在 students 节点下添加 student 节点
Element stuEle_1 = root.addElement("student");
//4. 在 student 节点下添加 name, age 子节点
stuEle_1.addAttribute("id", "001");
stuEle_1.addElement("name").setText("Mike");
stuEle_1.addElement("age").setText("23");
Element stuEle_2 = root.addElement("student");
stuEle_2.addAttribute("id", "001");
stuEle_2.addElement("name").setText("Rose");
stuEle_2.addElement("age").setText("22");
//5. 把 1 创建好的 Document 对象, 写到 students.xml 文件中
XMLWriter xmlWriter = null;
FileWriter fileWriter = new FileWriter("students.xml");
OutputFormat format = OutputFormat.createPrettyPrint();
xmlWriter = new XMLWriter(fileWriter, format);
xmlWriter.write(document);
xmlWriter.close();
}
}
生成的XML如下:
<?xml version="1.0" encoding="UTF-8" ?>
- <Students>
- <student id="002">
<name>Tom</name>
<age>23</age>
</student>
- <student>
<name>Jim</name>
<age>24</age>
</student>
</Students>
(2)增加子节点
A.获取新创建的子节点信息文本信息。
B.通过SAXReader的read( File f )方法获取XML文档的document对象。
C.注意,要现获取根节点,然后在根节点下按层次地用addElement()和addAttribute()增加子节点和属性。
D.用XMLWriter.write(Document doc)方法把修改后的Document对象持久化到XML文件中
E.关闭XMLWriter流。
(3)删除子节点
A.获取XML文档的document对象
B.获取要删除子节点的对象,可使用Xpath方便地获取
C.获取要删除子节点的父节点
D.从document对象中用父节点. remove(子节点)的方法删除子节点
font-family: Times New Roman