java sax解析xml例子_java解析xml之sax解析xml示例分享

package com.test;

import java.io.File;

import java.io.FileInputStream;

import java.util.ArrayList;

import java.util.List;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class SaxXML {

public static void main(String[] args) {

File file = new File("e:/People.xml");

try {

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser parser = spf.newSAXParser();

SaxHandler handler = new SaxHandler("People");

parser.parse(new FileInputStream(file), handler);

List peopleList = handler.getPeoples();

for(People people : peopleList){

System.out.println(people.getId()+"\t"+people.getName()+"\t"+people.getEnglishName()+"\t"+people.getAge());

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

class SaxHandler extends DefaultHandler {

private List peoples = null;

private People people;

private String currentTag = null;

private String currentValue = null;

private String nodeName = null;

public List getPeoples() {

return peoples;

}

public SaxHandler(String nodeName) {

this.nodeName = nodeName;

}

@Override

public void startDocument() throws SAXException {

// TODO 当读到一个开始标签的时候,会触发这个方法

super.startDocument();

peoples = new ArrayList();

}

@Override

public void endDocument() throws SAXException {

// TODO 自动生成的方法存根

super.endDocument();

}

@Override

public void startElement(String uri, String localName, String name,

Attributes attributes) throws SAXException {

// TODO 当遇到文档的开头的时候,调用这个方法

super.startElement(uri, localName, name, attributes);

if (name.equals(nodeName)) {

people = new People();

}

if (attributes != null && people != null) {

for (int i = 0; i < attributes.getLength(); i++) {

if(attributes.getQName(i).equals("id")){

people.setId(attributes.getValue(i));

}

else if(attributes.getQName(i).equals("en")){

people.setEnglishName(attributes.getValue(i));

}

}

}

currentTag = name;

}

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

// TODO 这个方法用来处理在XML文件中读到的内容

super.characters(ch, start, length);

if (currentTag != null && people != null) {

currentValue = new String(ch, start, length);

if (currentValue != null && !currentValue.trim().equals("") && !currentValue.trim().equals("\n")) {

if(currentTag.equals("Name")){

people.setName(currentValue);

}

else if(currentTag.equals("Age")){

people.setAge(currentValue);

}

}

}

currentTag = null;

currentValue = null;

}

@Override

public void endElement(String uri, String localName, String name)

throws SAXException {

// TODO 在遇到结束标签的时候,调用这个方法

super.endElement(uri, localName, name);

if (name.equals(nodeName)) {

peoples.add(people);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值