JAVA解析xml(SAX)

本文介绍使用SAX解析XML的基本步骤,包括获取SAXParserFactory对象、SAXParser对象及解析过程。通过实例演示了如何自定义Handler类来解析XML文件,并存储解析后的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值