Java中关于XML的创建与解析

本文介绍了XML的基本概念,XML文件的内容结构,并详细讲解了如何在Java中解析XML文件,以及利用代码生成格式化的XML文件。解析XML时,提到了使用dom4j库的方法以及输出效果。

一、什么是XML?

定义:
可扩展的标记语言,是独立于硬件和软件的一种信息传输工具,一般用于web应用程序中。
使用场景:
框架的配置文件(*.xml)
以前,前端与后端之间的数据交互使用的就是XML,由于其的不便利性,如今已改为使用JSON(传输工具)。

二、XML文件中的内容说明

在这里插入图片描述
注意:
1、第一行是XML的指令。
2、元素的名字可以自定义,根元素只能有一个,根元素中可以有多个子元素。

三、解析XML文件

目的:为了获取具体的name、job内容。

此时需要用到第三方jar包(dom4j.jar):
点击项目名->new folder(lib)->导入jar包->Build Path
导入成功

package day20200622;

import java.util.List;

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

public class ReadXmlFile {
	public static void main(String[] args) throws DocumentException {
		//1、创建SAXReader对象,用来获取xml中的文件内容
		SAXReader sr = new SAXReader();
		
		//2、读取xml文件,调用read(file)方法返回的是一个Document对象
		//该对象中包含了xml中所有元素对应的节点
		Document doc = sr.read("xml/hero.xml");//此处抛出了异常
		//System.out.println(doc);
		
		//3、解析doc文件,获取我们想要的内容
		//3-1获取doc中的根目录,Element类表示xml中的元素类
		Element root = doc.getRootElement();
		//3-2获取根元素的名称
		System.out.println(root.getName());//heros
		//3-3获取指定元素下面的所有元素
		//因为,不止一个,所以用集合去接收
		List<Element> eles = root.elements();
		
		//4、遍历集合
		//way one:适合未知属性名(name,job)的情况
//		for(Element ele : eles) {
//			//ele代表了hero那一层了,还要继续解析
//			List<Element> eles1 = ele.elements();
//			for(Element ele1 : eles1) {
//				//可以输出name、job的内容
//				System.out.println("元素的名称:"+ele1.getName()+",元素的内容:"+ele1.getText());
//			}
//		}
		
		//way two:适合已知属性名的情况
		for(Element ele : eles) {
			String name = ele.elementText("name");
			String job = ele.elementText("job");
			String id = ele.attributeValue("id");
			System.out.println(name);
			System.out.println(job);
			System.out.println(id);
		}
	}
}

way one 输出效果:
在这里插入图片描述way two 输出效果:
在这里插入图片描述

四、使用代码生成XML文件

package day20200622;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

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

public class CreatXml {
	public static void main(String[] args) throws IOException {
		//创建一个字节输出流,指向要创建的文件
		OutputStream os = new FileOutputStream("xml/hero1.xml");
		//1、创建XMLWriter对象
		XMLWriter xw = new XMLWriter(os);
		//2、创建Document对象,通过自定义的方法
		Document doc = creatDocument();
		//3、将doc对象写入到xml中
		xw.write(doc);
		//4、关流
		xw.close();
		os.close();
		System.out.println("写入完成");
	}
	/**
	 * 设定xml文件的内容
	 * @return
	 */
	private static Document creatDocument() {
		//创建Document对象
		Document doc = DocumentHelper.createDocument();
		//1、添加元素对象(搭架构)
		//1-1第一个添加进去的元素就是根元素
		Element root = doc.addElement("heros");
		//1-2在根元素中添加其他元素
		Element sub = root.addElement("hero");
		//1-3添加name、job元素
		Element su1 = sub.addElement("name");
		Element su2 = sub.addElement("job");
		//2、设置内容
		su1.setText("鲁班七号");
		su2.setText("射手");
		//id属性要添加到hero上面
		//在指定元素中添加属性 addAttribute("属性名称", "属性值")
		sub.addAttribute("id", "1");
		return doc;
	}
}

效果显示:
在这里插入图片描述
这样子显示不够清楚明白,所以要去规定显示的格式,格式化输出XML:

//创建一个字节输出流,指向要创建的文件
OutputStream os = new FileOutputStream("xml/hero1.xml");
//格式化输出XML
OutputFormat of = new OutputFormat();
//调整缩进的格式
of.setIndent(true);
//设置换行
of.setNewlines(true);
//创建XMLWriter对象
XMLWriter xw = new XMLWriter(os,of);

显示效果:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值