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);
}
}