SAX解析xml文件

来源:互联网 发布:淘宝宝贝详情图片素材 编辑:程序博客网 时间:2024/05/29 19:39

    实现功能:将部署在服务器上的xml文件转化成流的形式和继承DefaultHandler类的自定义MyHandler类的提交给XMLParser类通过SAXParserFactory利用工厂模式对文件进行解析


要解析xml文件如下:

<?xml version="1.0" encoding="UTF-8"?><persons><person id="23"><name>jack</name><age>21</age></person><person id="25"><name>july</name><age>24</age></person></persons>


1,对MyHandler类进行分析

  • 有以下几类成员:
private HashMap<String, String> map = null;private ArrayList<HashMap<String, String>> list = null;private String nodeName;private String currentTag;private String currentValue;
hashmap 对象用来封装每个标签的属性和属性的值

list用来存放每个person标签的map对象

nodeName 表示传入要解析的标签名称

crruentTag 表示当前正在解析的标签名称

crruentValue 表示当前正在解释标签里面的内容

  • 主要继承的方法有以下几个:

@Overridepublic void startDocument() throws SAXException {list = new ArrayList<HashMap<String, String>>();}// 将每个元素的属性放入map中@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// 解析的元素为当前传进来的元素if (qName.equals(nodeName)) {map = new HashMap<String, String>();}// 遍历元素的属性并加入map中,如元素中的id属性,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 {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.trim());}}//解析标签后将当前标签的名称和值都置为空currentTag = null;currentValue = null;}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if (qName.equals(nodeName)) {list.add(map);map = null;}}
DefaultHandler类解析xml文件的顺序参考:http://blog.csdn.net/neu_yousei/article/details/22647937?utm_source=tuicool&utm_medium=referral


2,对XmlReader类的分析

 核心代码:

public static List<HashMap<String, String>> readXml(InputStream is,String nodeName) {// 创建一个解析xml的工厂对象SAXParserFactory factory = SAXParserFactory.newInstance();try {SAXParser parser = factory.newSAXParser();MyHandler myHandler = new MyHandler(nodeName);parser.parse(is, myHandler);is.close();return myHandler.getList();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ParserConfigurationException | SAXException e) {e.printStackTrace();}return null;}
3,对网页的xml文件的或许及转化成inputStream则参考

public static InputStream getInputStream() {InputStream inputStream = null;try {URL url = new URL(PATH);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(3000);conn.setDoInput(true);conn.setRequestMethod("GET");inputStream = conn.getInputStream();} catch (Exception e) {// TODO: handle exception}return inputStream;}



























0 0