XML解析

XML

概述

​ HTML:超文本标记语言,天生自带很多标签,每个标签都可以用来描述一些网页信息

​ XML:可扩展标记语言,自身不带任何标签,所有标签都是我们自定义的,或者我们也可以引入别人定义好的标签来使用,设计之初目的就是用来传递数据使用

Java解析xml的主要4种方式

​ 1:DOM解析

​ 2:SAX解析

​ 3:JDOM解析

​ 4:DOM4J解析(最常使用的方式)

XML的问题

​ 由于xml文件标签都是我们自定义的,本身没有任何约束,所以就有可能会有人不按照要求来写标签,如果有人这样做就会造成解析失败,程序会出现运行问题

​ 所以我们可以给xml文件制定约束规则,然后让别人引用这套规则,如果有人引用这个规则,那么就必须遵守规则来写标签,而不能乱写标签了

​ 1:在.dtd文件中指定标签都有哪些

​ 2:在schema文件中指定标签都有哪些,标签的属性值都有哪些

​ 由于schema文件指定的规则更加丰富,所以目前使用schema文件来指定xml规则是主流的做法

<?xml version="1.0" encoding="UTF-8"?>
<!-- XML的格式与HTML有点类似 ,里面全部是由标签组成,只是标签变成了我们自定义的标签,我们定义标签
的时候,需要以树形结构来定义,每棵树只有一个根部,所以每个xml都需要有一个根标签,其余所有标签都在根
标签之内-->
<books>
	<book myID="1">
		<number>666</number>
		<name>红楼梦</name>
	</book>
	<book myID="2">
		<number>777</number>
		<name>西游记</name>
	</book>
	<book myID="3">
		<number>888</number>
		<name>水浒传</name>
	</book>
	<book myID="4">
		<number>999</number>
		<name>三国演义</name>
	</book>
</books>
@Data
public class Book {
	private int id;
	private int number;
	private String name;
}
/**
 * 主要目的:
 * 解析book.xml:将里面的数据转化成Book类对象
 *
 */
public class Dom4JTest {
	public static void main(String[] args) throws DocumentException {
		// 1:创建一个reader对象,用于读取文件
		SAXReader reader = new SAXReader();
		// 2:通过读取文件获得一个Document文档对象
		Document document = reader.read(new File("D:\\workspace\\YDemo20\\src\\com\\ishangu\\dom4j\\Book.xml"));
		// 3:先找到文档的根(头)节点
		Element rootElement = document.getRootElement();
		// 4:获得头节点的迭代器,去遍历里面的子节点
		Iterator<Element> iterator = rootElement.elementIterator();
		List<Book> list = new ArrayList<>();
		while(iterator.hasNext()){
			// 获取根节点的直接子节点(book标签)
			Element book = iterator.next();
			// 获取book标签的属性
			//List list = book.attributes();
			Attribute bookAttribute = book.attribute("myID");
			Book bo = new Book();
			bo.setId(Integer.valueOf(bookAttribute.getValue()));
			Iterator<Element> it = book.elementIterator();
			while(it.hasNext()){
				Element next = it.next();
				// 当前标签名字是number的时候
				if(next.getName().equals("number")){
					// 将number标签中的值存入到对象
					bo.setNumber(Integer.valueOf(next.getStringValue()));
				}else if(next.getName().equals("name")){
					bo.setName(next.getStringValue());
				}
			}
			list.add(bo);
		}
		System.out.println(list);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值