茂展的分享博客

XML初步总结

XML

可扩展标记语言,是一种标记语言
非常灵活,没有固定的标签,所有的标签都是自定义!通常用于信息的记录和传递!

xml格式

格式良好的xml文档

  • 必须有xml声明语句
  • 必须有且仅有一个根元素
  • 标签大小写敏感
  • 属性值用双引用
  • 标签成对
  • 元素正确嵌套

有效的XML文档

  • 首先必须有良好的格式
  • 使用DTDXSD定义语义约束

注释写法

1
<!--这是注释-->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book>
<name>十月围城</name>
<price>21</price>
</book>
<book>
<name>李沫熙</name>
<price>22</price>
</book>
<book>
<name>杨宁宁</name>
<price>11</price>
</book>
</books>

xml解析

然后我们需要解析到xml标签中的数据
我们可以使用以下四种方法来解析
1、DOM解析;
2、SAX解析;
3、JDOM解析;
4、DOM4J解析
我们着重了解一下 SAX解析方式

我们定义的xml内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book>
<name>十月围城</name>
<price>21</price>
</book>
<book>
<name>李沫熙</name>
<price>22</price>
</book>
<book>
<name>杨宁宁</name>
<price>11</price>
</book>
</books>

然后使用SAX解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package com.nyist.xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


/**
* SAX解析
*/
public class Test1 {

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//1.获取解析工厂
SAXParserFactory factory =SAXParserFactory.newInstance();
//2. 从解析工厂获取解析器
SAXParser parser = factory.newSAXParser();
//3.编写处理器
BookHandler handler = new BookHandler();
//开始解析
parser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("test.xml"),handler);
//获得解析的数据
List<Book> books = handler.getBooks();
//使用增强for循环遍历
for (Book book : books) {
System.out.println("书名:"+book.getName()+"-->"+"价格:"+book.getPrice());
}
}
}
class BookHandler extends DefaultHandler{

private List<Book> books;
private Book book;
private String tag;


@Override
public void startDocument() throws SAXException {
books = new ArrayList<>();
}

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(qName != null){
if(qName.equals("book")){
book = new Book();
}
tag = qName;
}
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String str = new String(ch, start, length).trim();
if(str.length() > 0){
if(tag.equals("name")){
book.setName(str);
}else if(tag.equals("price")){
book.setPrice(Integer.valueOf(str));
}
}
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName != null){
if(qName.equals("book")){
books.add(book);
}
}
qName = null;
}

public List<Book> getBooks() {
return books;
}
}

于是我们可以从我们的xml得到数据
执行结果

------本文结束感谢阅读------
🐶 您的支持将鼓励我继续创作 🐶