xml的两种解析方法

一个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("结束解析文档"); } }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值