使用sax解析xml文件
程序员文章站
2022-05-29 18:18:07
...
使用sax解析xml文件
import java.io.File;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxDemo {
public static void main(String[] args) throws Exception {
//创建sax解释器的工厂对象
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
//使用sax解释器的工厂对象生产一个sax解释器
SAXParser saxParser = parserFactory.newSAXParser();
//使用sax解释器解释xml文件了。
MyParserHandler h=new MyParserHandler();
saxParser.parse(new File("persons.xml"), h);
List result=h.getResult();
System.out.println("**"+result.size());
}
}
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 定义事件处理器,需要继承DefaultHandler类
* 需要重写startElement、characters、endElement 3个方法。
*/
public class MyParserHandler extends DefaultHandler {
ArrayList<Person> list = new ArrayList<Person>();
Person p = null;
StringBuilder sb = null;
// 读取开始节点
public void startElement(String uri, String localName, String tagName,
Attributes attributes) throws SAXException {
if ("person".equals(tagName)) {
p = new Person();// 创建一个person对象
// 设置id
String id = attributes.getValue("id"); //属性节点
p.setId(id);
}
// 创建了一个字符串缓冲区
sb = new StringBuilder();
System.out.println("startElement->"+tagName);
}
// 读取文本内容
public void characters(char[] ch, int start, int length)
throws SAXException {
// 先获取到当前文本的所有内容 地址
String text = new String(ch, start, length);
if (sb != null) {
sb.append(text);
}
}
// 读取结束标签
public void endElement(String uri, String localName, String tagName)
throws SAXException {
if ("name".equals(tagName)) {
p.setName(sb.toString());
} else if ("age".equals(tagName)) {
p.setAge(sb.toString());
} else if ("email".equals(tagName)) {
p.setEmail(sb.toString());
} else if ("address".equals(tagName)) {
p.setAddress(sb.toString());
} else if ("person".equals(tagName)) {
list.add(p); // 将读取到的包含所有信息的person对象存储到集合中
}
// 清空StringBuilder的内容
sb = null;
System.out.println(list.size());
}
public List getResult(){
return list;
}
}
public class Person {
private String id;
private String name;
private String age;
private String email;
private String address;
}
<?xml version="1.0" encoding="gbk"?>
<person-list>
<person id="100">
<name>张三</name>
<age>19</age>
<email>123454@qq.com</email>
<address>广州天河</address>
</person>
<person id="200">
<name>李四</name>
<age>20</age>
<email>22222@qq.com</email>
<address>广州番禺</address>
</person>
</person-list>
import java.io.File;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxDemo {
public static void main(String[] args) throws Exception {
//创建sax解释器的工厂对象
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
//使用sax解释器的工厂对象生产一个sax解释器
SAXParser saxParser = parserFactory.newSAXParser();
//使用sax解释器解释xml文件了。
MyParserHandler h=new MyParserHandler();
saxParser.parse(new File("persons.xml"), h);
List result=h.getResult();
System.out.println("**"+result.size());
}
}
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 定义事件处理器,需要继承DefaultHandler类
* 需要重写startElement、characters、endElement 3个方法。
*/
public class MyParserHandler extends DefaultHandler {
ArrayList<Person> list = new ArrayList<Person>();
Person p = null;
StringBuilder sb = null;
// 读取开始节点
public void startElement(String uri, String localName, String tagName,
Attributes attributes) throws SAXException {
if ("person".equals(tagName)) {
p = new Person();// 创建一个person对象
// 设置id
String id = attributes.getValue("id"); //属性节点
p.setId(id);
}
// 创建了一个字符串缓冲区
sb = new StringBuilder();
System.out.println("startElement->"+tagName);
}
// 读取文本内容
public void characters(char[] ch, int start, int length)
throws SAXException {
// 先获取到当前文本的所有内容 地址
String text = new String(ch, start, length);
if (sb != null) {
sb.append(text);
}
}
// 读取结束标签
public void endElement(String uri, String localName, String tagName)
throws SAXException {
if ("name".equals(tagName)) {
p.setName(sb.toString());
} else if ("age".equals(tagName)) {
p.setAge(sb.toString());
} else if ("email".equals(tagName)) {
p.setEmail(sb.toString());
} else if ("address".equals(tagName)) {
p.setAddress(sb.toString());
} else if ("person".equals(tagName)) {
list.add(p); // 将读取到的包含所有信息的person对象存储到集合中
}
// 清空StringBuilder的内容
sb = null;
System.out.println(list.size());
}
public List getResult(){
return list;
}
}
public class Person {
private String id;
private String name;
private String age;
private String email;
private String address;
}
<?xml version="1.0" encoding="gbk"?>
<person-list>
<person id="100">
<name>张三</name>
<age>19</age>
<email>123454@qq.com</email>
<address>广州天河</address>
</person>
<person id="200">
<name>李四</name>
<age>20</age>
<email>22222@qq.com</email>
<address>广州番禺</address>
</person>
</person-list>