XML网课笔记2——XML的解析

XML的解析

对XML文件进行操作,包括创建xml,对xml文件进行增删改查操作。

3.1 常见的xml解析技术

3.1.1 DOM解析

是官方提供的解析方式,基于xml树解析的
比较耗资源,适用于多次访问xml

3.1.2 SAX解析

是民间的解析方式,基于事件的解析
消耗资源小,使用于数据量较大的xml

3.1.3 JDOM解析

第三方提供,开源免费的解析方式,比DOM解析快
仅使用具体类而不使用接口

3.1.4 DOM4J解析

第三方提供,开源免费的解析方式,是JDOM的升级版
使用接口而不是实现类

dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。

3.2 DOM4J解析XML

解析xml的入口,是需要先拿到一个Document对象

3.2.1 读取xml文件中的信息

导入jar包:
下载地址:https://dom4j.github.io/

新建一个class文件:

package wangke_xml;

import java.io.File;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class TestXml {
	public static void main(String[] args) throws Exception {
		//[1] 创建SAXReader对象,用于读取xml文件
		SAXReader reader = new SAXReader();
		//[2] 读取xml文件,得到Document对象
		Document doc = reader.read(new File("src/scores2.xml"));
		System.out.println(doc);  //此时就生成了一个Document对象,里面包含了整个xml的所有信息
	}
}

此时就找到了入口

下面开始解析
思路:以根元素为出发点,一层一层往下往下取子元素

完整代码:

package wangke_xml;

import java.io.File;
import java.util.Iterator;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class TestXml {
	public static void main(String[] args) throws Exception {
		// [1] 创建SAXReader对象,用于读取xml文件
		SAXReader reader = new SAXReader();
		// [2] 读取xml文件,得到Document对象
		Document doc = reader.read(new File("src/scores2.xml"));
		//System.out.println(doc);  //此时就生成了一个Document对象,里面包含了整个xml的所有信息
		
		// [3] 获取根元素
		Element root = doc.getRootElement();
		//System.out.println(root.getName());  //获取到根元素的名字
		
		// [4] 获取根元素下所有子元素
		Iterator<Element> it = root.elementIterator();  //用迭代器
		while(it.hasNext()) { //迭代器是配合while使用的
			//取出元素
			Element e = (Element) it.next();
			System.out.println(e.getName());  //输出两个student
			
			//获取id属性
			Attribute id = e.attribute("id");
			System.out.println(id.getName() + "=" + id.getValue());  //如果有多个属性,就用属性迭代器
			
			//获取student的子元素
			Element name = e.element("name");
			Element course = e.element("course");
			Element score = e.element("score");
			System.out.println(name.getName() + "=" + name.getStringValue()); //取文本内容
			System.out.println(course.getName() + "=" + course.getText());
			System.out.println(score.getName() + "=" + score.getText());
			System.out.println("------------------------------");
		}
	}
}

3.2.2 DOM4J生成xml

解析xml的入口点,需要形成一个Document对象
上一个是读一个已有的xml文件,然后形成一个Document对象
现在是没有xml,把一些信息写成一个xml文件

所以是自己创建一个Document对象

package wangke_xml;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class TestXml2 {

	public static void main(String[] args) throws IOException {
		
		// [1] 通过DocumentHelper生成一个Document对象
		Document doc = DocumentHelper.createDocument();
		//链式编程,下面的[2]~[4]可以用以下这句话表示:
		//doc.addElement("books").addElement("book").addAttrubute("id","b01");
		// [2] 添加并得到根元素
		Element root = doc.addElement("books");
		// [3] 为根元素添加子元素
		Element book = root.addElement("book");
		// [4] 为book元素添加属性
		book.addAttribute("id", "b01");  //返回的还是Element类型
		// [5] 为book添加子元素
		Element name = book.addElement("name");
		Element author = book.addElement("author");
		Element price = book.addElement("price");
		// [6] 为子元素添加文本
		name.addText("Thinking in Java");
		author.addText("小明");
		price.addText("80");
		// [7] 将doc输出到xml文件即可
		Writer writer = new FileWriter(new File("src/book2.xml"));
		doc.write(writer);
		// [8] 关闭资源
		writer.close();
	}

}

运行,刷新一下文件列表,就看到已经创建了一个book2.xml
在这里插入图片描述
但输出的格式是这样的:
在这里插入图片描述
如果要输出格式良好的,修改一下:
[7][8]改成下面这个:
在这里插入图片描述
把之前生成的book2.xml删掉,重新运行,得到的新的book2.xml是这样的:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45550460/article/details/105935565