万能笔记本,你值得拥有;(XML)

本文介绍了XML的基本概念、特点、与HTML的区别,深入讲解了XML的语法和元素命名规则,并探讨了四种XML解析方式,重点讨论了DOM4J解析XML的步骤,包括创建SAXReader、读取XML文件、获取根元素和遍历节点。
摘要由CSDN通过智能技术生成

Xml


XML 指可扩展标记语言(EXtensible Markup Language)
XML 没有预定义标签,需要自行定义标签


提示:以下是本篇文章正文内容,下面案例可供参考

XML 的特点

XML 数据以纯文本格式存储
实现不同应用程序之间的数据通信
实现不同平台间的数据通信
实现不同平台间的数据共享
使用 XML 将不同的程序、不同的平台之间联系起来

XML 的作用

数据存储和数据传输

XML 和 和 HTML 之间的差异

XML 主要作用是数据存储和传输(传输)
HTML 主要作用是用来显示数据(显示)

XML 基本语法

  1. 有且只有一个根元素
  2. XML 文档声明必须放在文档的第一行
  3. 所有标签必须成对出现
  4. XML 的标签严格区分大小写
  5. XML 必须正确嵌套
  6. XML 中的属性值必须加引号
  7. XML 中一些特殊字符需要使用“实体”
  8. XML 中可以应用适当的注释

XML 元素

XML 元素指的是开始标签到结束标签的部分
一个元素中可以包含

  1. 其他元素
  2. 文本
  3. 属性
  4. 以上的混合

XML 命名规则

1)名称可以包含字母、数字及其他字符
2) 名称不能以数字或者标点符号开始
3) 名称不能以字母 xml 开始
4) 名称不能包含空格

四种解析 XML

1)DOM 解析:
形成了树结构,有助于更好的理解、掌握,且代码容易编写。解析过程中,树结构保存在内存中,方便修改。

2)SAX 解析:
采用事件驱动模式,对内存耗费比较小。适用于只处理 XML 文件中的数据时

3)JDOM 解析:
仅使用具体类,而不使用接口。API 大量使用了 Collections 类。

4)DOM4J 解析:
JDOM 的一种智能分支,它合并了许多超出基本 XML 文档表示的功能。
它使用接口和抽象基本类方法。具有性能优异、灵活性好、功能强大和极端易用的特点。是一个开放源码的文件


这里我们详细说一些Dom4J的解析方式;


DOM4J的使用

DOM4J 解析 XML 的步骤

  1. 创建 SAXReader 对象
  2. 调用 read 方法
  3. 获取根元素
  4. 通过迭代器遍历直接节点

代码如下:

创建book.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id="1001">
		<name>美食</name>
		<author>于大猫</author>
		<price>98.5</price>
	</book>
	<book id="1002">
		<name>煎饼</name>
		<author>于小猫</author>
		<price>50</price>
	</book>
</books>

创建book实体类

package xml01;

public class Book {
	private String name;
	private String author;
	private double price;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public Book(String name, String author, double price) {
		super();
		this.name = name;
		this.author = author;
		this.price = price;
	}
	public Book() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Book [name=" + name + ", author=" + author + ", price=" + price + "]";
	}
	
}

创建解析测试类

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;





public class TestDOM4J {
	public static void main(String[] args) throws DocumentException {
//		创建SAXReader对象
		SAXReader reader = new SAXReader();
//		得到文档
//		调用read方法 ,参数需要一个file类型的数据  返回一个Document对象;
//		返回的Document的包不要导错了 import org.dom4j.Document;
		Document document = reader.read(new File("book.xml"));
//		获取根元素  通过getRootElement()方法获取根元素 返回一个Element对象;
		Element element = document.getRootElement();//books
//		通过迭代器遍历直接节点 book
		for(Iterator<Element> iterable = element.elementIterator();iterable.hasNext();) {
			Element element2 =iterable.next();
			System.out.println(element2.getName());
//			得到book的属性
			for(Iterator<Attribute> iterator1 = element2.attributeIterator();iterator1.hasNext();) {
				Attribute attribute = iterator1.next();
				System.out.println(attribute.getName()+"\t"+attribute.getText());
			}
			
		}
		System.out.println("----------------------");
//		创建list集合用于存储book
		List<Book> list = new ArrayList<Book>();
		
		for(Iterator<Element> iterator = element.elementIterator();iterator.hasNext(); ) {//books
//			创建book对象;
			Book book = new Book();
			Element element2 = iterator.next(); //获取book
			for(Iterator<Element> iterator2 = element2.elementIterator();iterator2.hasNext();) {
				Element element3 = iterator2.next();//获取book下的子节点
				System.out.println(element3.getName()+"\t"+element3.getText());
				
//				封装成book对象
				String nodeNameString = element3.getName();
				switch(nodeNameString) {
					case "name":
					book.setName(element3.getText());
					break;
					case "author":
					book.setAuthor(element3.getText());
					break;
					case "price":
					book.setPrice(Double.parseDouble(element3.getText()));
					break;
				}
				
			}
//			添加到集合中;
			list.add(book);
			
		}
		list.forEach(System.out::println);
		
		
		
	}
}

思维导图

在这里插入图片描述


葵花落语

感觉收看,如果帮到您,点个赞,关个注,评个论呗,葵花在这里感激不尽!!!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值