1.xml简介
可扩展标记语言,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统 一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中 跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。
作用:
- 存储数据
- 传输数据
举例:
<?xml version="1.0" encoding="UTF-8" ?>
<families>
<family>
<person>
<name>父亲</name>
<age>36</age>
</person>
<person>
<name>母亲</name>
<age>35</age>
</person>
</family>
<family>
<person>
<name>父亲</name>
<age>36</age>
</person>
<person>
<name>母亲</name>
<age>35</age>
</person>
</family>
</families>
2.xml解析
- 解析方式
DOM4J解析:融合了Dom和Sax的优点,即能保证效率,同时也可多次获取。著名的开发框架Spring和Hibernate都使用了Dom4j的功能。(注使用时需要导入jar包:dom4j-1.6.1.jar)
3.使用DOM4J
<?xml version="1.0" encoding="utf-8" ?>
<中国>
<北京>
<海淀></海淀>
<丰台></丰台>
</北京>
<山东>
<济南></济南>
<青岛></青岛>
</山东>
<湖北>
<武汉></武汉>
<荆州></荆州>
</湖北>
</中国>
@Test//获取xml中的数据
public void test1() throws DocumentException, IOException {
//1.获取sax解析器对象
SAXReader reader = new SAXReader();
//2.读取某个xml文件--返回一个文档对象,表示整个xml文档树
Document doc = reader.read("src/xmlDemoTest/demo01/city.xml");
//3.获取根标签
Element root = doc.getRootElement();
//4.逐级向下寻找标签 获得山东标签下的子标签名
Element element1 = root.element("山东");
List<Element> elements1 = element1.elements();
for (Element element11 : elements1) {
System.out.println(element11.getName());
/*将标签名写入标签内文本*/
element11.setText(element11.getName());
}
/*创建字节输出流*/
FileOutputStream out = new FileOutputStream("src/xmlDemoTest/demo01/city.xml");
/*输出格式对象*/
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
/*创建xml输出对象*/
XMLWriter xmlWriter = new XMLWriter(out, format);
/*将dom对象放入到xml输出对象中*/
xmlWriter.write(doc);
/*刷新关闭*/
xmlWriter.close();
}
运行效果:
<?xml version="1.0" encoding="UTF-8"?>
<中国>
<北京>
<海淀/>
<丰台/>
</北京>
<山东>
<济南>济南</济南>
<青岛>青岛</青岛>
</山东>
<湖北>
<武汉/>
<荆州/>
</湖北>
</中国>
补充:
element.elements(“标签名”).get(index) 可以根据下标拿到父标签下的子标签
element.remove(Element e);可以删除节点
element.add(Element e);添加标签
element.getText();获得标签中的文本
element.getName()获得标签名
DocumentHelper.createDocument();创建一个dom树