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