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
- xml文件解析-SAX
- sax解析xml文件
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析xml文件
- SAX解析xml文件
- XML文件解析 sax
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- sax 解析xml文件
- xml文件Sax解析
- SAX 解析XML 文件
- SAX 解析Xml文件
- LeetCode#337. House Robber III
- TextSwitcher实现文字上下翻牌效果
- poj2010 Moo University - Financial Aid
- 有用的java代码
- PrintWriter out=response.getWriter()的问题
- SAX解析xml文件
- R and MongoDB
- PHP编码规范与PSR标准
- android教程之textview解析带图片的html示例
- Spring Boot 学习(一)
- 从零开始搭建 reviewboard 环境(五) -- reviewboard 在linux中的使用
- centos下为php添加gd扩展
- 图像特征提取之HOG+LBP+HAAR
- CSS入门介绍