XML
可扩展标记语言:eXtensible Markup Language。是一种简单的数据存储语言。使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然可扩展标记语言占用的空间比二进制数据要占用更多的空间,但可扩展标记语言极其简单易于掌握和使用。
基本的解析方式有两种:
SAX:基于事件流的解析。
DOM:基于xml文档树结构的解析。
常见的四种解析方式:
1.DOM生成和解析xml文档。
2.SAX生成和解析xml文档。
3.DOM4J生成和解析xml文档。
4.JDOM生成和解析xml。
SAX解析步骤:
1.获得解析工厂,SAXParserFactory;
2.工厂获取解析器,SAXParser;
3.加载文档Document,注册处理器。
实现xml文件解析的demo如下:
Person类的代码:
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
对xml文件的解析PersonHandler,继承DefaultHandler,然后重写下面的五个方法:
public class PersonHandler extends DefaultHandler{
private List<Person> persons;
private Person person;
private String tag;//记录标签名
public List <Person> getPersons() {
return persons;
}
public PersonHandler() {
super();
}
@Override
public void startDocument() throws SAXException {
persons = new ArrayList <Person>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("开始一个元素=========" + qName);
if (null != qName){
tag = qName;
}
if (null != qName && qName.equals("person")){
person = new Person();
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String str = new String(ch,start,length);
if (null != tag && tag.equals("name")){
person.setName(str);
} else if (null != tag && tag.equals("age")){
Integer age = Integer.valueOf(str);
person.setAge(age);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("person")){
this.persons.add(person);
}
tag = null;
}
@Override
public void endDocument() throws SAXException {
System.out.println("文档处理结束。。。。。。");
}
}
我们的xml文件person.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<persons>
<person>
<name>张三</name>
<age>9000</age>
</person>
<person>
<name>李四</name>
<age>120</age>
</person>
</persons>
然后我们的main方法,"com/test/xml/person.xml"为xml文件在项目中所处的位置,这里用SAX解析:
public class PersonDemo01 {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//获取解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//从解析工厂获取解析器
SAXParser parse = factory.newSAXParser();
//加载文档Document注册处理器
//编写处理器
PersonHandler handler = new PersonHandler();
parse.parse(Thread.currentThread().getContextClassLoader().
getResourceAsStream("com/test/xml/person.xml"), handler);
List<Person> persons = handler.getPersons();
for (Person p : persons){
System.out.println(p.getName() + "======>>" + p.getAge());
}
}
}
以上代码的执行结果如下:
上图可以看出对xml文件的解析,以及获取xml文件里面数据的值。