5.7XML解析技术介绍
xml 可扩展的标记语言。不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。
早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介(已经过时,但我们需要知道这两种技术)
1、 dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。Java 对 dom 技术解析标记也做了实现。
2、 sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML )。SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。所以它在解析 xml 的时候,在内存的使用上和性能上。都优于 Dom 解析。
3、 第三方的解析:jdom 在 dom 基础上进行了封装,dom4j 又对 jdom 进行了封装。
5.8DOM4j解析技术
XML文件的读取步骤:
1、 创建XML文件;
1. <?xml version="1.0" encoding="UTF-8" ?>
2. <books>
3. <book sn="SN12341232">
4. <name>辟邪剑谱</name>
5. <price>9.9</price>
6. <author>班主任</author>
7. </book>
8. <book sn="SN12341231">
9. <name>葵花宝典</name>
10. <price>99.99</price>
11. <author>班长</author>
12. </book>
13. </books>
2、 创建XML标签对应的类信息;
1. package com.at.guigu;
2.
3. import java.math.BigDecimal;
4.
5. /**
6. * @author peng
7. * @date 2021/12/16 - 10:56
8. * <p>
9. * 创创建Java对象,用于解析XML文件信息
10. */
11. public class Book {
12. private String sn;
13. private String name;
14. private String author;
15. private BigDecimal price;
16.
17. public Book() {
18. }
19.
20. public Book(String sn, String name, String author, BigDecimal price) {
21. this.sn = sn;
22. this.name = name;
23. this.author = author;
24. this.price = price;
25. }
26.
27. public String getSn() {
28. return sn;
29. }
30.
31. public void setSn(String sn) {
32. this.sn = sn;
33. }
34.
35. public String getName() {
36. return name;
37. }
38.
39. public void setName(String name) {
40. this.name = name;
41. }
42.
43. public String getAuthor() {
44. return author;
45. }
46.
47. public void setAuthor(String author) {
48. this.author = author;
49. }
50.
51. public BigDecimal getPrice() {
52. return price;
53. }
54.
55. public void setPrice(BigDecimal price) {
56. this.price = price;
57. }
58.
59. @Override
60. public String toString() {
61. return "Books{" +
62. "sn='" + sn + '\'' +
63. ", name='" + name + '\'' +
64. ", author='" + author + '\'' +
65. ", price=" + price +
66. '}';
67. } }
3、 使用DOM4j读取XML的内容。
1. public void test2() throws DocumentException {
2. //读取XML文件
3. SAXReader saxReader = new SAXReader();
4. //获取XML的document对象
5. Document document = saxReader.read("day05XML/src/books.xml");
6. //通过document对象获取XML的根元素
7. Element rootElement = document.getRootElement();
8. //通过根标签来获取book标签对象,因为有多个book,所以获取到的是一个集合
9. List<Element> books = rootElement.elements("book");
10. //遍历集合
11. for (Element book : books) {
12. //asXML();是将XML对象转换成标签
13. //System.out.println(book.asXML());
14.
15. //获取书名,如果这么麻烦的话使用XML意义何在?
16. Element bookName = book.element("name");
17. String bookNameText = bookName.getText();
18.
19. //或者可以直接获取标签里面的内容
20. String bookprice = book.elementText("price");
21.
22. String bookauthor = book.elementText("author");
23.
24. //获取标签的属性
25. String sn = book.attributeValue("sn");
26.
27. //创建Book对象,将相应的属性值放入其中
28. System.out.println(new Book(sn, bookNameText, bookauthor, new BigDecimal(bookprice)));
29. }
30. }