sax java解析xml_Java解析XML的三种方式(1)-SAX解析

1.[文件] sax.xml ~ 185B     下载(9)

李明30

李向梅25

2.[文件] SaxXMLParser.java ~ 943B     下载(7)

package com.senvn.parser;

import java.io.IOException;

import java.io.InputStream;

import java.util.HashMap;

import java.util.List;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import com.senvn.sax.CustomSaxHandler;

public class SaxXMLParser {

public static List> readXML(InputStream input, String nodeName){

try {

SAXParserFactory spf = SAXParserFactory.newInstance();

SAXParser parser = spf.newSAXParser();

CustomSaxHandler handler = new CustomSaxHandler(nodeName);

parser.parse(input, handler);

input.close();

return handler.getList();

} catch (ParserConfigurationException e) {

e.printStackTrace();

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

3.[文件] CustomSaxHandler.java ~ 3KB     下载(7)

package com.senvn.sax;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class CustomSaxHandler extends DefaultHandler {

private HashMap map = null;

private List> list = null;

/**

* 当前正在解析的元素

*/

private String currentTag = null;

private String currentValue = null;

private String nodeName = null;

public CustomSaxHandler() {

}

public CustomSaxHandler(String nodeName) {

this.nodeName = nodeName;

}

/**

* 当读到文件的开始

*/

public void startDocument() throws SAXException {

// 初始化list

this.list = new ArrayList>();

}

/**

* 开始节点

*/

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

Attributes attributes) throws SAXException {

System.out.println("uri:"+uri+";localName:"+localName+";qName:"+qName+";");

if(qName.equals(nodeName)){

map = new HashMap();

}

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

for(int i = 0;i

map.put(attributes.getQName(i), attributes.getValue(i));

System.out.println("索引:"+i+";结点属性名称:Qname:"+attributes.getQName(i)+";结点属性值:value:"+attributes.getValue(i));

}

}

currentTag = qName;

}

@Override

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

throws SAXException {

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);

}

}

System.out.println("currentTag:"+currentTag+";currentValue:"+currentValue);

currentTag=null;

currentValue=null;

}

@Override

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

throws SAXException {

if(qName.equals(nodeName)){

list.add(map);

map = null;

}

}

public HashMap getMap() {

return map;

}

public void setMap(HashMap map) {

this.map = map;

}

public List> getList() {

return list;

}

public void setList(List> list) {

this.list = list;

}

public String getCurrentTag() {

return currentTag;

}

public void setCurrentTag(String currentTag) {

this.currentTag = currentTag;

}

public String getCurrentValue() {

return currentValue;

}

public void setCurrentValue(String currentValue) {

this.currentValue = currentValue;

}

public String getNodeName() {

return nodeName;

}

public void setNodeName(String nodeName) {

this.nodeName = nodeName;

}

}

4.[文件] SaxXmlParseTest.java ~ 692B     下载(7)

package com.senvn.test;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.util.HashMap;

import java.util.List;

import com.senvn.parser.SaxXMLParser;

public class SaxXmlParseTest {

public static void main(String[] args) {

File file = new File("sax.xml");

try {

FileInputStream fileInputStream = new FileInputStream(file);

List> list = SaxXMLParser.readXML(fileInputStream, "person");

for(HashMap p : list){

System.out.println(p.toString());

}

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值