XML解析之PULL解析+SAX解析+DOM解析
来源:互联网 发布:农村淘宝在哪里取消 编辑:程序博客网 时间:2024/06/02 23:28
1.PULL解析
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();// 获取XmlPullParser实例pullParser = factory.newPullParser();
public List<News> pull(XmlPullParser pullParser, InputStream inStream) {News news = null;List<News> lists = null;try {// 设置解析内容pullParser.setInput(inStream, "UTF-8");// 开始int eventType = pullParser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {String nodeName = pullParser.getName();switch (eventType) {// 文档开始case XmlPullParser.START_DOCUMENT:lists = new ArrayList<News>();break;// 开始节点case XmlPullParser.START_TAG:if ("news".equals(nodeName)) {news = new News();} else if ("id".equals(nodeName)) {news.setId(Integer.parseInt(pullParser.nextText()));} else if ("title".equals(nodeName)) {news.setTitle(pullParser.nextText());} else if ("body".equals(nodeName)) {news.setBody(pullParser.nextText());} else if ("commentCount".equals(nodeName)) {news.setCommentCount(Integer.parseInt(pullParser.nextText()));} else if ("author".equals(nodeName)) {news.setAuthor(pullParser.nextText());} else if ("authorid".equals(nodeName)) {news.setAuthorid(Integer.parseInt(pullParser.nextText()));} else if ("pubDate".equals(nodeName)) {news.setPubDate(pullParser.nextText());} else if ("url".equals(nodeName)) {news.setUrl(pullParser.nextText());}break;// 结束节点case XmlPullParser.END_TAG:if ("news".equals(nodeName)) {lists.add(news);news = null;}break;default:break;}// 手动的触发下一个事件eventType = pullParser.next();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return lists;}
2.SAX解析
// 获取SAX解析的工厂类SAXParserFactory instance = SAXParserFactory.newInstance();
private void initData(SAXParserFactory instance) {try {// 获取SAX解析的解析类SAXParser newSAXParser = instance.newSAXParser();// 获取Xml读取类XMLReader xmlReader = newSAXParser.getXMLReader();xmlReader.setContentHandler(new DefaultHandler() {// 定义全局变量,记录每次读取到的标签的名字String temp;City city;@Overridepublic void startDocument() throws SAXException {Log.d("print", "startDocument: " + "文档开始读取");}// 读取到开始标签,通过localName判断读取到了哪一个开始标签@Overridepublic void startElement(String uri, String localName,String qName, Attributes attributes)throws SAXException {temp = localName;Log.d("print", "start: temp" + temp);// 判断是不是开始标签if ("city".equals(temp)) {// 实例化要封装的对象city = new City();// 获取值,将值封装入对象String id = attributes.getValue("id");city.setId(Integer.parseInt(id));}}// 得到标签内携带的数据@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// 将字符数组转换成为字符串String str = new String(ch, start, length);Log.d("print", "characters :" + str);if ("name".equals(temp)) {city.setName(str);} else if ("type".equals(temp)) {city.setType(str);} else if ("address".equals(temp)) {city.setAddress(str);}}@Overridepublic void endElement(String uri, String localName,String qName) throws SAXException {temp = localName;Log.d("print", "end temp :" + temp);if ("city".equals(temp)) {// 添加到集合data.add(city);// 对象置空city = null;}// 清空记录变量的标签temp = null;}@Overridepublic void endDocument() throws SAXException {Log.d("print", "endDocument:" + "文档读取完毕");}});// 设置要读取的源文件xmlReader.parse(new InputSource(getAssets().open("city.xml")));} catch (Exception e) {e.printStackTrace();Log.d("print", "异常了:");}}
3.DOM解析
// 得到DOM解析的工厂类DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();try {// 得到DOM方式的解析类DocumentBuilder documentbuilder = builderFactory.newDocumentBuilder();// 通过输入流设置要解析的xml文件,得到Document(文本对象),包含当前xml的信息Document document = documentbuilder.parse(getAssets().open("data.xml"));// 获得根元素 (根节点)<persons>Element documentElement = document.getDocumentElement();// 得到根元素下所有的子节点NodeList childNodes = documentElement.getChildNodes();// 遍历出根元素下所有的子节点for (int i = 0; i < childNodes.getLength(); i++) {// 每一个子节点下的数据,都封装成一个对象Person p = new Person();// 按角标取得相对应的子节点Node node = childNodes.item(i);// 判断节点是不是元素if (node.getNodeType() == Node.ELEMENT_NODE) {// 把子节点转换成为元素Element element = (Element) node;// 得到当前元素的属性节点String id = element.getAttribute("id");p.setId(Integer.parseInt(id));// 得到<person>节点的所有子节点 <name>lee</name>和 <age>30</age>NodeList childNodes2 = element.getChildNodes();for (int j = 0; j < childNodes2.getLength(); j++) {// j=0时,得到 <name>lee</name>,j=1时,得到 <age>30</age>Node item = childNodes2.item(j);// 判断节点是不是元素点if (item.getNodeType() == Node.ELEMENT_NODE) {// 把节点转换成为元素Element element2 = (Element) item;// 得到标签所包含的文本String value = element2.getFirstChild().getNodeValue();// 如果标签是<name>,取出标签的文本内容,封装到person对象里if ("name".equals(element2.getNodeName())) {p.setName(value);} else if ("age".equals(element2.getNodeName())) {p.setAge(Integer.parseInt(value));}}}Log.d("print", p.toString());// 把封装的信息存入集合中data.add(p);}}} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
0 0
- XML解析之PULL解析+SAX解析+DOM解析
- xml解析之dom,sax,pull
- xml之SAX,DOM,PULL解析
- sax、dom、pull解析xml
- SAX、DOM、PULL解析XML
- Dom Sax Pull解析xml
- sax、dom、pull解析xml
- sax、dom、pull解析xml
- sax dom pull 解析xml
- 解析XML:DOM、SAX、PULL
- DOM、SAX、Pull解析XML
- pull,sax,dom解析XML
- 解析XML:DOM,SAX,PULL
- DOM、SAX、Pull解析XML
- xml解析:Sax,Dom,pull解析
- Android 解析XML(DOM解析,SAX解析,PULL解析)
- Android-解析XML(DOM解析,SAX解析,PULL解析)
- Android解析XML(DOM解析,SAX解析,PULL解析)
- JConsole监控远程Tomcat服务器
- Matlab读取ply文件,polydata
- Linux系统命令总结
- Epoll详解及源码分析
- 山东省省外院校毕业生注册【山东省高校毕业生就业信息网】须知
- XML解析之PULL解析+SAX解析+DOM解析
- Golang 常用的一些基本操作
- 不属于底部导航栏上的Fragment 替换底部的Fragment
- SpringMVC入门-第二节:配置
- 很简单的图片自动轮播,点击焦点就显示点击的那个
- 如何自学Android编程
- Python入门自学笔记20160628
- day04_filtter() 和map函数
- Android 发送短信