`
yidongkaifa
  • 浏览: 4065205 次
文章分类
社区版块
存档分类
最新评论

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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics