Xml
XML 指可扩展标记语言(EXtensible Markup Language)
XML 没有预定义标签,需要自行定义标签
提示:以下是本篇文章正文内容,下面案例可供参考
XML 的特点
XML 数据以纯文本格式存储
实现不同应用程序之间的数据通信
实现不同平台间的数据通信
实现不同平台间的数据共享
使用 XML 将不同的程序、不同的平台之间联系起来
XML 的作用
数据存储和数据传输
XML 和 和 HTML 之间的差异
XML 主要作用是数据存储和传输(传输)
HTML 主要作用是用来显示数据(显示)
XML 基本语法
- 有且只有一个根元素
- XML 文档声明必须放在文档的第一行
- 所有标签必须成对出现
- XML 的标签严格区分大小写
- XML 必须正确嵌套
- XML 中的属性值必须加引号
- XML 中一些特殊字符需要使用“实体”
- XML 中可以应用适当的注释
XML 元素
XML 元素指的是开始标签到结束标签的部分
一个元素中可以包含
- 其他元素
- 文本
- 属性
- 以上的混合
XML 命名规则
1)名称可以包含字母、数字及其他字符
2) 名称不能以数字或者标点符号开始
3) 名称不能以字母 xml 开始
4) 名称不能包含空格
四种解析 XML
1)DOM 解析:
形成了树结构,有助于更好的理解、掌握,且代码容易编写。解析过程中,树结构保存在内存中,方便修改。
2)SAX 解析:
采用事件驱动模式,对内存耗费比较小。适用于只处理 XML 文件中的数据时
3)JDOM 解析:
仅使用具体类,而不使用接口。API 大量使用了 Collections 类。
4)DOM4J 解析:
JDOM 的一种智能分支,它合并了许多超出基本 XML 文档表示的功能。
它使用接口和抽象基本类方法。具有性能优异、灵活性好、功能强大和极端易用的特点。是一个开放源码的文件
这里我们详细说一些Dom4J的解析方式;
DOM4J的使用
DOM4J 解析 XML 的步骤
- 创建 SAXReader 对象
- 调用 read 方法
- 获取根元素
- 通过迭代器遍历直接节点
代码如下:
创建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);
}
}
思维导图
葵花落语
感觉收看,如果帮到您,点个赞,关个注,评个论呗,葵花在这里感激不尽!!!