XML
可扩展标记语言,是一种标记语言
非常灵活,没有固定的标签,所有的标签都是自定义!通常用于信息的记录和传递!
xml格式
格式良好的xml文档
- 必须有xml声明语句
- 必须有且仅有一个根元素
- 标签大小写敏感
- 属性值用双引用
- 标签成对
- 元素正确嵌套
有效的XML文档
- 首先必须有良好的格式
- 使用DTD和XSD定义语义约束
注释写法
1 | <!--这是注释--> |
1 |
|
xml解析
然后我们需要解析到xml标签中的数据
我们可以使用以下四种方法来解析
1、DOM解析;
2、SAX解析;
3、JDOM解析;
4、DOM4J解析
我们着重了解一下 SAX解析方式
我们定义的xml内容
1 |
|
然后使用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
84package 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;
public void startDocument() throws SAXException {
books = new ArrayList<>();
}
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;
}
}
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));
}
}
}
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得到数据