解析XML数据
来源:互联网 发布:成都网络营销优化 编辑:程序博客网 时间:2024/05/17 22:59
解析XML数据
其实就是已有的工具使用方法,特别白痴的做法,记住就好了。贵在实际项目中融会贯通
Pull解析方式
private void parseXmlWithPull(String xmlData) { try { //创建实例 XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance(); //得到对象 XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser(); //设置xml数据 xmlPullParser.setInput(new StringReader(xmlData)); String id = ""; String name = ""; String verson = ""; //得到当前的解析事件,若不等于1:说明解析工作还没有完成,调用next获取下一个解析事件 int eventType = xmlPullParser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { //拿到当前节点名 String nodeName = xmlPullParser.getName(); switch (eventType) { //开始解析2 case XmlPullParser.START_TAG: if ("id".equals(nodeName)) { //获取节点内容 id = xmlPullParser.nextText(); } else if ("name".equals(nodeName)) { name = xmlPullParser.nextText(); }else if("verson".equals(nodeName)){ verson=xmlPullParser.nextText(); } break; //解析完成3 case XmlPullParser.END_TAG: if("app".equals(nodeName)){ Log.i(TAG, "parseXmlWithPull: "+"id is"+id); } break; default: break; } eventType=xmlPullParser.next(); } } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } }
SAX解析方式
- 先建一个Handler继承DefaultHandler
/** * git_workspace * * @author liyuanli * @data 2017/10/31 */public class ContentHandler extends DefaultHandler { private String nodeName; private StringBuilder id; private StringBuilder name; private StringBuilder verson; private String TAG="ContentHandler"; /** * 开始解析xml时调用 * 这里初始化StringBuilder对象 * @throws SAXException */ @Override public void startDocument() throws SAXException { super.startDocument(); id=new StringBuilder(); name=new StringBuilder(); verson=new StringBuilder(); } /** * 完成整个xml解析时调用 * @throws SAXException */ @Override public void endDocument() throws SAXException { super.endDocument(); } /** * 开始解析某个节点是调用 * @param uri * @param localName * @param qName * @param attributes * @throws SAXException */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); //记录当前节点名 nodeName=localName; } /** * 完成解析某个节点时调用 * @param uri * @param localName * @param qName * @throws SAXException */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); if("app".equals(localName)){ Log.i(TAG, "endElement: "+"id is "+id.toString().trim()); //最后要将StirngBuilder清空掉 id.setLength(0); } } /** * 读取节点内容时调用 * @param ch * @param start * @param length * @throws SAXException */ @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); //根据当前节点名判断将内容添加到那个StirngBuilder对象中 if ("id".equals(nodeName)){ id.append(ch,start,length); }else if ("name".equals(nodeName)){ name.append(ch,start,length); }else if ("verson".equals(nodeName)){ verson.append(ch,start,length); } }}
- 调用Handler解析
private void parseXMLWithSAX(String xmlData){ try { SAXParserFactory saxParserFactory=SAXParserFactory.newInstance(); XMLReader xmlReader=saxParserFactory.newSAXParser().getXMLReader(); ContentHandler contentHandler=new ContentHandler(); //将ContentHandler的实例设置到XMLReader中 xmlReader.setContentHandler(contentHandler); //开始执行解析 xmlReader.parse(new InputSource(new StringReader(xmlData))); } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
阅读全文
0 0
- oracle解析xml数据
- 解析XML格式数据
- Jdom 解析XML数据
- jquery 解析 xml数据
- xml数据解析
- xml数据的解析
- Android---解析XML数据
- xml形式数据解析
- xml数据解析
- XML数据解析
- js解析XML数据
- 解析XML数据
- iOS xml数据解析
- 解析XML数据
- xml数据解析
- XML数据的解析
- xml数据解析方法
- XML、JSON数据解析
- TestNG Annotations示例
- HDU2050
- 怎样处理僵死进程
- Longest Consecutive Sequence
- VS2008编译x265
- 解析XML数据
- NOIP 2010 题解+代码
- Linux下如何进行SFTP用户权限设置
- HSI颜色空间和RGB颜色空间之间的相互转换
- 多线程进阶--Future与Callable
- Html标签
- spring cloud的的服务消费者
- spring的学习(一)
- expdp和impdp的用法