Java 手动解析xml数据
来源:互联网 发布:ubuntu 装软件 编辑:程序博客网 时间:2024/06/10 16:29
前言:开发过程中用到极少,不过还是在这做个记录。 小伙伴们周末愉快☺。
原文出处:http://blog.csdn.net/u014158743/article/details/52963527
公司里跟服务器基本都是用json数据进行数据交互,用xml的还真是少。不过抱着负责任的态度(- -!),咳咳。。。还是上tomcat吧。用tomcat模拟服务器,在服务器端的MyHttp工程目录下存在person.xml。本地访问服务器得到xml数据后分别进行pull和sax解析。
服务器端的person.xml
<?xml version = "1.0" encoding = "UTF-8"?><persons> <person id = "23"> <name>张老师</name> <age>21</age> </person> <person id = "20"> <name>李老师</name> <age>25</age> </person></persons>
pull解析PullParser.java
public class PullParser { public List<Person> parser(String path) throws XmlPullParserException, IOException { List<Person> list = null; Person person = null; XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); InputStream in = HttpUtil.getInputStream(path); parser.setInput(in, "utf-8"); int event = parser.getEventType(); while(event!=XmlPullParser.END_DOCUMENT) { switch(event) { case XmlPullParser.START_DOCUMENT: list = new ArrayList<Person>();break; case XmlPullParser.START_TAG: String tagName = parser.getName(); if("person".equals(tagName)) { person = new Person(); int count = parser.getAttributeCount(); for(int i=0;i<count;i++) { String atrrName = parser.getAttributeName(i); String attrValue = parser.getAttributeValue(i); if("id".equals(atrrName)) person.setId(attrValue); } } else if("name".equals(tagName)) { person.setName(parser.nextText()); } else if("age".equals(tagName)) { person.setAge(Integer.parseInt(parser.nextText())); } break; case XmlPullParser.END_TAG: if("person".equals(parser.getName())) list.add(person); break; } event = parser.next(); } return list; }}
sax解析MyHandler.java
public class MyHandler extends DefaultHandler { private List<Person> list; private Person person; private String tagName; @Override public void startDocument() throws SAXException { list = new ArrayList<Person>(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { tagName = qName; if("person".equals(qName)) { person = new Person(); for(int i=0;i<attributes.getLength();i++) { String attrName = attributes.getQName(i); String attrValue = attributes.getValue(i); if("id".equals(attrName)) person.setId(attrValue); } } } @Override public void characters(char[] ch, int start, int length) throws SAXException { String data = new String(ch,start,length); if("name".equals(tagName)) person.setName(data); else if("age".equals(tagName)) person.setAge(Integer.parseInt(data)); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { tagName = null; if("person".equals(qName)) list.add(person); } @Override public void endDocument() throws SAXException { } public List<Person> getList() { return list; } }
本地用来存放数据的实体类Person.java
public class Person { private String id; private String name; private int age; public Person() { // TODO Auto-generated constructor stub } public Person(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; }}
访问模拟服务器的工具类HttpUtil.java
public class HttpUtil { public static InputStream getInputStream(String path) throws IOException { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); conn.setDoInput(true); conn.connect(); InputStream in =null; if(conn.getResponseCode()==200) { in = conn.getInputStream(); } return in; }}
程序入口
最后调用
/**pull*/public static void main(String[] args) throws XmlPullParserException, IOException { String path = "http://localhost:8080/MyHttp/person.xml"; PullParser parser = new PullParser(); List<Person> list =parser.parser(path); for(Person person:list) { System.out.println(person); }}
/**sax*/public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { String path = "http://localhost:8080/MyHttp/person.xml"; SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser =factory.newSAXParser(); InputStream in = HttpUtil.getInputStream(path); MyHandler handler = new MyHandler(); parser.parse(in, handler); List<Person> list = handler.getList(); for(Person person:list) { System.out.println(person); }}
1 0
- Java 手动解析xml数据
- java --- Xml数据解析
- Java 手动解析Json数据小记
- Java 解析xml数据 sax
- Java XML JSON 数据解析
- Java解析xml格式数据
- Json数据手动解析
- 手动解析json数据
- JAVA JDOM解析XML 带CDATA数据
- java实现解析xml数据为list
- JAVA-使用SAX解析XML数据
- 使用java读取/解析XML数据
- java用DefaultHandler解析XML格式数据
- Java解析和构造XML数据
- 手动解析及数据链接地址
- Android中json数据手动解析方式
- 关于Json数据的手动解析
- java利用url解析网页内容并模拟手动form提交数据
- linux修改默认的编辑器
- JavaScript原生下拉菜单完美兼容IE
- CodeVS2296 仪仗队
- ES6入门(一):块级作用域
- OpenCV Tutorial: 銳化
- Java 手动解析xml数据
- mac下安装virtualbox+vagrant
- Google 的新玩法 Fact Check
- 在公司如何成为一个合格的员工揭秘
- 写给Android开发者的混淆使用手册
- Android 6.0 分析 (一位网友的分析,不错)
- 第十一讲项目6-坐标转换
- OJ1002 C语言版
- Hive之架构 & 功能