xml的两种解析方法
来源:互联网 发布:js日历代码 编辑:程序博客网 时间:2024/05/16 18:23
一个student类:package com.xml.test;public class Student { private String name; private String sex; private int age; public Student(){} public Student(String name, String sex, int age) { super(); this.name = name; this.sex = sex; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString(){ return "姓名:"+name+" 性别:"+sex+" 年龄:"+age; } }---------------------------------------------------------------------------------------------------------------------- dom解析package com.xml.test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class DomTest { public void createXml(){ try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); Element root = doc.createElement("students"); //设置根节点 doc.appendChild(root); //创建二级节点 Element stu1 = doc.createElement("student"); Element stu2 = doc.createElement("student"); Element stu3 = doc.createElement("student"); root.appendChild(stu1); root.appendChild(stu2); root.appendChild(stu3); //创建三级节点 Element name1 = doc.createElement("name"); name1.setTextContent("康"); Element sex1 = doc.createElement("sex"); sex1.setTextContent("男"); Element age1 = doc.createElement("age"); age1.setTextContent("29"); stu1.appendChild(name1); stu1.appendChild(sex1); stu1.appendChild(age1); Element name2 = doc.createElement("name"); name2.setTextContent("sweet"); Element sex2 = doc.createElement("sex"); sex2.setTextContent("女"); Element age2 = doc.createElement("age"); age2.setTextContent("20"); stu2.appendChild(name2); stu2.appendChild(sex2); stu2.appendChild(age2); Element name3 = doc.createElement("name"); name3.setTextContent("大神"); Element sex3 = doc.createElement("sex"); sex3.setTextContent("男"); Element age3 = doc.createElement("age"); age3.setTextContent("25"); stu3.appendChild(name3); stu3.appendChild(sex3); stu3.appendChild(age3); TransformerFactory tranf = TransformerFactory.newInstance(); Transformer trans = tranf.newTransformer(); //给文件转换器设置字符编码 trans.setOutputProperty("encoding", "utf-8"); trans.setOutputProperty(OutputKeys.INDENT, "yes"); //定义转换器输入对象 DOMSource source = new DOMSource(doc); //定义转换器输出对象 Result target = new StreamResult("test.xml"); trans.transform(source, target); } catch (Exception e) { e.printStackTrace(); } } public List<Student> parseXml(String path){ try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(path); NodeList nl = doc.getElementsByTagName("student"); List<Student> list = new ArrayList<Student>(); for(int i=0;i<nl.getLength();i++){ Element e = (Element)nl.item(i); String name = e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue(); String sex = e.getElementsByTagName("sex").item(0).getFirstChild().getNodeValue(); String age = e.getElementsByTagName("age").item(0).getFirstChild().getNodeValue(); Student stu = new Student(name,sex,Integer.parseInt(age)); list.add(stu); } return list; } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { DomTest dt = new DomTest();// List<Student> list = dt.parseXml("test.xml");// for (Iterator iterator = list.iterator(); iterator.hasNext();) {// Student student = (Student) iterator.next();// System.out.println(student);// // } dt.createXml(); }} ----------------------------------------------------------------------------------------------------------------------sax解析package com.xml.test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SaxTest { public List<Student> saxParse(String path) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); List<Student> list = new ArrayList<Student>(); parser.parse(path, new MyHandler(list)); return list; } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { SaxTest st = new SaxTest(); List<Student> list = st.saxParse("student.xml"); for (Iterator iterator = list.iterator(); iterator.hasNext();) { Student student = (Student) iterator.next(); System.out.println(student); } }}class MyHandler extends DefaultHandler{ private List list; private Student stu; private String target = ""; public MyHandler(List list){ this.list = list; } //开始文档 @Override public void startDocument() throws SAXException { System.out.println("开始解析文档"); } //开始解析节点 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("开始解析节点:uri:"+uri +" localName:"+localName+" qName:"+qName); target = qName; if(qName.equals("student")){ stu = new Student(); } } //节点内容 @Override public void characters(char[] ch, int start, int length) throws SAXException { String content = new String(ch,start,length); System.out.println("节点内容:"+content); if(target.equals("name")){ stu.setName(content); }else if(target.equals("sex")){ stu.setSex(content); }else if(target.equals("age")){ stu.setAge(Integer.parseInt(content)); } } //结束解析节点 @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("结束解析节点:uri:"+uri +" localName:"+localName+" qName:"+qName); target = ""; if(qName.equals("student")){ list.add(stu); } } //文档解析结束 @Override public void endDocument() throws SAXException { System.out.println("结束解析文档"); } }
- xml的两种解析方法
- 解析XML文件的两种方法
- 两种XML解析方法
- 常见的XML的两种解析方法
- 两种解析XML文档的方法-----DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- 两种解析XML文档的方法---DOM和SAX
- XML数据解析的两种方法:SAX和DOM
- Java加载和解析XML文件的两种方法
- 使用DOM4J解析XML文件的两种方法
- [iOS]XML两种解析方法
- XML解析的两种解析方式
- 关于处理xml的两种方法,xmlPullParser与Dom解析的两种
- kxml解析 xml的两种方式
- LoadXML的正确使用(原文:http://blog.sina.com.cn/s/blog_68530d690100mlcp.html)
- Activity跳转页面切换漂亮效果(转)
- Android 2.1下调试3G模块
- dev/zero 是什么
- jquery的不同写法可能造成浏览器的不兼容问题!
- xml的两种解析方法
- Gingerbread build on Arch Linux x86_64 with gcc 4.6.0 / small patch
- python3之python的核心数据类型(列表)
- 实体数据库命名约定
- 10.17
- 会员管理系统(一)--页面登陆与注册
- 紧张啊
- Public Sale
- Mac OS X 10.7 (Lion) 下ROR环境配置 (RVM + REE + Rails 3 + MacVim)