java 解析XML

目录

1.解析XML

1.1DOM

1.2SAX(不常用)

1.3DOM4J(常用)

2.DOM4J解析

2.1常用API

2.2准备环境

2.2.1.配置环境

2.2.2.准备XML文件

2.2.3.需求:

2.3加载DOM树

3.4实现需求


​​​​​​​

1.解析XML

1.1DOM

1.2SAX(不常用)

1.3DOM4J(常用)

2.DOM4J解析

2.1常用API

Document接口:定义XML文档

Element接口:定义XML元素

Text接口:定义XML文本节点

Attribute接口:定义XML属性

2.2准备环境

2.2.1.配置环境

将工程的所有设置配置成utf-8,并导入jar包,并手工创建XML文件

在工程下创建文件夹,命名为lib

将文件Dom4j-1.6.1.jar复制进去

右击文件,选择add path

2.2.2.准备XML文件

<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
	<Brand name="华为">
		<Type name="Mate30 Pro"></Type>
		<Type name="p30 Pro"></Type>
		<Type name="nova 6"></Type>
	</Brand>
	<Brand name="苹果">
		<Type name="iPhione1 Pro"></Type>
	</Brand>
</PhoneInfo>

文件名为a.xml

2.2.3.需求:

1.显示手机收藏信息

2.为手机收藏信息添加新的节点

3.保存手机收藏信息

4.修改手机收藏信息节点

5.删除品牌为"华为"的手机

2.3加载DOM树

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

public class Dom4jXML1 {
	/*
	 * 1.加载DOM树
	 */

	public void loadXML() {
		// 1.实例化SAXReader对象
		SAXReader saxReader = new SAXReader();
		try {
			// 2.添加包,并查看返回值,导入
			Document doc = saxReader.read("src\\a.xml");
			// 3.查看输出是否成功
			System.out.println(doc);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}


	public static void main(String[] args) {
		// 4.调用方法,判断成功
		Dom4jXML1 dom4jXML = new Dom4jXML1();
		dom4jXML.loadXML();
	}
}

3.4实现需求

import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jXML1 {
	Document doc = null;

	/*
	 * 1.加载DOM树
	 */
	public void loadXML() {
		// 1.实例化SAXReader对象
		SAXReader saxReader = new SAXReader();
		try {
			// 2.调用saxReader的read()方法,添加包,并查看返回值,导入
			doc = saxReader.read("src\\a.xml");
			// 3.查看输出是否成功
			System.out.println(doc);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}

	/*
	 * 2.查询XML
	 */
	public void findXML() {
		// 1.调用getRootElement()获取根节点
		Element root = doc.getRootElement();
		// 2.遍历根节点,得到所有的儿子元素brandInfos
		Iterator brandInfos = root.elementIterator();
		// 3. 遍历儿子元素brandInfos
		while (brandInfos.hasNext()) {
			// 4.获取儿子元素节点
			Element brandInfo = (Element) brandInfos.next();
			// 5.打印儿子元素节点name属性
			System.out.println(brandInfo.attributeValue("name"));
			// 6.获取孙子对象节点
			Iterator types = brandInfo.elementIterator();
			while (types.hasNext()) {
				// 7.获取孙子对象节点
				Element type = (Element) types.next();
				// 8.打印孙子对象节点的name属性
				System.out.println(type.attributeValue("name"));
			}
		}
	}

	/*
	 * 添加节点
	 */
	public void addXML() {
		// 1.获取根节点
		Element root = doc.getRootElement();
		// 2.添加儿子元素节点
		Element brandInfos = root.addElement("Brand");
		// 3.给儿子节点元素添加name属性
		brandInfos.addAttribute("name", "三星");
		// 4.添加孙子节点
		Element types = brandInfos.addElement("Type");
		// 5.给孙子节点添加属性name
		types.addAttribute("name", "note4");

		saveXML("src\\b.xml");
	}

	/*
	 * 保存
	 */
	public void saveXML(String path) {
		// 1.调用OutputFormat类的creatPrettyPrint()
		OutputFormat format = OutputFormat.createPrettyPrint();
		// 2.设置字符集
		format.setEncoding("utf-8");
		// 3.创建XMLWriter对象
		XMLWriter writer = null;
		try {
			// 4.调用XMLWriter对象
			writer = new XMLWriter(new FileWriter(path), format);
			// 5.输出给文件
			writer.write(doc);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 6.关闭流对象
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/*
	 * 修改
	 */
	public void updateXML() {
		// 1.调用getRootElement()获取根节点
		Element root = doc.getRootElement();
		// 2.遍历根节点,得到所有的儿子元素brandInfos
		Iterator brandInfos = root.elementIterator();
		// 3.定义变量id
		int id = 0;
		// 4.循环遍历儿子元素集合
		while (brandInfos.hasNext()) {
			Element brand = (Element) brandInfos.next();
			id++;
			brand.addAttribute("id", id + "");
		}
		saveXML("src\\c.xml");
	}

	/*
	 * 删除
	 */
	public void removeXML() {
		// 1.调用getRootElement()获取根节点
		Element root = doc.getRootElement();
		// 2.遍历根节点,得到所有的儿子元素brandInfos
		Iterator brandInfos = root.elementIterator();
		// 3. 遍历儿子元素brandInfos
		while (brandInfos.hasNext()) {
			// 4.获取儿子元素节点
			Element brandInfo = (Element) brandInfos.next();
			if (brandInfo.attributeValue("name").equals("华为"))
				brandInfo.getParent().remove(brandInfo);
		}
		saveXML("src\\d.xml");
	}

	public static void main(String[] args) {
		// 4.调用方法,判断成功
		Dom4jXML1 dom4jXML = new Dom4jXML1();
		dom4jXML.loadXML();
		dom4jXML.addXML();
		dom4jXML.updateXML();
		dom4jXML.removeXML();
		dom4jXML.findXML();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值