xml读取.sax解析方式 使用于Android 和java中 ,代码是java的, 在Android中只需要 区别监听类中的参数(localName,qName),相反的,java中使用qname 为节点的名称;
public class mainTest { public static void main(String[] args) { List<Person> persons = new ArrayList<Person>(); try {
//读取网络中的xml /*URL url = new URL("http://127.0.0.1:8080/JavaInputSteam/db.xml"); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); InputStream input = connection.getInputStream();*/ //读取本地文件夹 地址 File file=new File("E:\\MyEclipse 10\\xiazai\\xml\\db.xml"); InputStream input=new FileInputStream(file); //创建sax工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader reader = parser.getXMLReader(); //获取读 reader.setContentHandler(new SAXPrinter(persons)); //设置监听类 reader.parse(new InputSource(input)); //设置输入流 } catch (Exception e) { e.printStackTrace(); }
//编写监听类 继承 DefaultHandler public class SAXPrinter extends DefaultHandler { private String startNode; //开始节点 private Person person; //人物 对象 private List<Person> persons; //人物集合 //构造 public SAXPrinter(List<Person> persons) { super(); this.persons = persons; } //开始读取判断 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { startNode = qName; if ("person".equals(startNode)) { person = new Person(); } } //结束判断 @Override public void endElement(String uri, String localName, String qName) throws SAXException { startNode = ""; // 赋值 if ("person".equals(qName)) { persons.add(person); } }
//取值 @Override public void characters(char[] ch, int start, int length) throws SAXException { String str = new String(ch, start, length); //转换为字符串 if ("name".equals(startNode)) { person.setName(str); //赋值 } if ("age".equals(startNode)) { person.setAge(str); } if ("address".equals(startNode)) { person.setAddress(str); } } }
posted on 2016-01-29 21:26 AndroidStart 阅读(175) 评论(0) 收藏 举报
浙公网安备 33010602011771号