java sax解析xml文件

来源:互联网 发布:用友网络校园招聘 编辑:程序博客网 时间:2024/05/17 10:55

1.handler类解析xml

public class MyHandler extends DefaultHandler {

private HashMap<String, String> map = null;// 存储单个解析的完整对象private List<HashMap<String, String>> list = null;// 存储所有的解析对象private String currentTag = null;// 正在解析的元素的标签private String currentValue = null;// 解析当前元素的值private String nodeName = null;// 解析当前的节点名称public MyHandler(String nodeName) {    // TODO Auto-generated constructor stub    this.nodeName = nodeName;}public List<HashMap<String, String>> getList() {    return list;}@Overridepublic void startDocument() throws SAXException {    // TODO Auto-generated method stub    // 当读到第一个开始标签的时候,会触发这个方法    list = new ArrayList<HashMap<String, String>>();}@Overridepublic void startElement(String uri, String localName, String qName,        Attributes attributes) throws SAXException {    // 当遇到文档的开头的时候,调用这个方法    if (qName.equals(nodeName)) {        map = new HashMap<String, String>();    }    if (attributes != null && map != null) {        for (int i = 0; i < attributes.getLength(); i++) {            map.put(attributes.getQName(i), attributes.getValue(i));        }    }    currentTag = qName;}@Overridepublic void characters(char[] ch, int start, int length)        throws SAXException {    // TODO Auto-generated method stub    // 这个方法是用来处理xml文件所读取到的内容    if (currentTag != null && map != null) {        currentValue = new String(ch, start, length);        if (currentValue != null && !currentValue.trim().equals("")                && !currentValue.trim().equals("\n")) {            map.put(currentTag, currentValue);        }    }    currentTag = null;// 把当前的节点的对应的值和标签设置为空    currentValue = null;}@Overridepublic void endElement(String uri, String localName, String qName)        throws SAXException {    // TODO Auto-generated method stub    // 遇到结束标记的时候,会调用这个方法    if (qName.equals(nodeName)) {        list.add(map);        map = null;    }    super.endElement(uri, localName, qName);}

}

2、取得与服务器连接的输入流

public class HttpUtils {

public HttpUtils() {    // TODO Auto-generated constructor stub}public static InputStream getXML(String path) {    InputStream inputStream = null;    try {        URL url = new URL(path);        if (url != null) {            HttpURLConnection connection = (HttpURLConnection) url                    .openConnection();            connection.setConnectTimeout(3000);            connection.setDoInput(true);            connection.setRequestMethod("GET");            int code = connection.getResponseCode();            if (code == 200) {                inputStream = connection.getInputStream();            }        }    } catch (Exception e) {        // TODO: handle exception    }    return inputStream;}

}

3、创建xml解析器

public class SaxService {

public SaxService() {    // TODO Auto-generated constructor stub}public static List<HashMap<String, String>> readXML(        InputStream inputStream, String nodeName) {    try {        // 创建一个解析xml的工厂对象        SAXParserFactory spf = SAXParserFactory.newInstance();        SAXParser parser = spf.newSAXParser();// 解析xml        MyHandler handler = new MyHandler(nodeName);        parser.parse(inputStream, handler);        inputStream.close();        return handler.getList();    } catch (Exception e) {        // TODO: handle exception    }    return null;}

}

4、测试类

public class Test {

public Test() {    // TODO Auto-generated constructor stub}/** * @param args */public static void main(String[] args) {    // TODO Auto-generated method stub    String path = "http://127.0.0.1:8080/myhttp/person.xml";    InputStream inputStream = HttpUtils.getXML(path);    try {        List<HashMap<String, String>> list = SaxService.readXML(                inputStream, "person");        for (HashMap<String, String> map : list) {            System.out.println(map.toString());        }    } catch (Exception e) {        // TODO: handle exception    }}

}

0 0
原创粉丝点击