您的位置:首页 > 编程语言 > Java开发

JAVA解析xml(SAX)

2017-08-22 22:11 225 查看
1.获取SAXParserFactory对象

SAXParserFactory factory= SAXParserFactory.newInstance();

2.获取SAXParser对象
SAXParser parser=factory.newSAXParser();

3.加载文件
Handler handler=new Handler();
parser.parse("books.xml", handler);
4.创建解析类,继承DefaultHandler,通过重写方法实现解析xml功能
public class Handler extends DefaultHandler {
private com.xbx.Book book;
String value;
public ArrayList<com.xbx.Book> list=new ArrayList<>();
//解析开始节点
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
if (qName.equals("book")) {
book=new com.xbx.Book();
int att_l=attributes.getLength();
//已知属性名 获取属性值
//System.out.println(attributes.getValue("id"));
//不知道属性名获取属性值与属性名
for (int i = 0; i < att_l; i++) {
//获取属性名
System.out.print("属性"+attributes.getQName(i));
if (attributes.getQName(i).equals("id")) {
book.setId(attributes.getQName(i));
}
//获取属性值
System.out.println("--------值:"+attributes.getValue(i));
}
}
if (!qName.equals("bookstore")) {
if (!qName.equals("book")) {
System.out.print(qName);
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
if (qName.equals("book")) {
list.add(book);
book=null;
}
else if (qName.equals("id")) {
book.setId(value);
}else if (qName.equals("name")){
book.setName(value);
}else if (qName.equals("year")){
book.setYear(value);
}else if (qName.equals("price")){
book.setPrice(value);
}
}
//文件解析开始
@Override
public void startDocument() throws SAXException {
System.out.println("解析开始");
// TODO Auto-generated method stub
super.startDocument();
}
//文件解析结束
@Override
public void endDocument() throws SAXException {
System.out.println("解析结束");
// TODO Auto-generated method stub
super.endDocument();
}

//获取节点的值,将xml存入ch中,调用方法,获取属性所在的开始位置与长度,读取
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
value=new String(ch, start, length);
if (!value.trim().equals("")) {
System.out.println("-----"+value);
}
}
}主函数的代码:
public class SaxTest {

public static void main(String[] args) {
//获取SAXParserFactory对象
SAXParserFactory factory= SAXParserFactory.newInstance();
try {
//获取SAXParser对象
SAXParser parser=factory.newSAXParser();
Handler handler=new Handler();
//加载文件
parser.parse("books.xml", handler);
for (int j = 0; j < handler.list.size(); j++) {
Book book=handler.list.get(j);
System.out.println(book.getName());
//System.out.println(book.getId());
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}5.通过创建对象保存解析的xml数据
建立Book类:

public class Book {

private String id;
private String year;
private String price;
private String name ;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}

}在Handler中创建对象并保存到List中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: