【学习笔记】JAVA读写XML

来源:互联网 发布:莫干黄芽茶 淘宝 编辑:程序博客网 时间:2024/06/11 18:38

要读的xml

<?xml version="1.0" encoding="GB2312"?><学生花名册><学生 性别 = "男"><姓名>李华</姓名><年龄>14</年龄></学生><学生 性别 = "男"><姓名>张三</姓名><年龄>16</年龄> </学生></学生花名册>

代码

import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.Iterator;import java.util.Vector;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Source;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;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.Node;import org.w3c.dom.NodeList;import org.w3c.dom.Text;public class DomTest { Vector students_Vector; private Vector readXMLFile(String file) throws Exception {  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  DocumentBuilder builder = dbf.newDocumentBuilder();  Document doc = builder.parse(file); // 获取到xml文件  // 下面开始读取  Element root = doc.getDocumentElement(); // 获取根元素  NodeList students = root.getElementsByTagName_r("学生");  students_Vector = new Vector();  for (int i = 0; i < students.getLength(); i++) {   // 一次取得每一个学生元素   Element ss = (Element) students.item(i);   // 创建一个学生的实例   student stu = new student();   stu.setSex(ss.getAttribute("性别"));   NodeList names = ss.getElementsByTagName_r("姓名");   Element e = (Element) names.item(0);   Node t = e.getFirstChild();   stu.setName(t.getNodeValue());   NodeList ages = ss.getElementsByTagName_r("年龄");   e = (Element) ages.item(0);   t = e.getFirstChild();   stu.setAge(Integer.parseInt(t.getNodeValue()));   students_Vector.add(stu);  }  return students_Vector; } // 写入xml文件 public static void callWriteXmlFile(Document doc, Writer w, String encoding) {  try {   Source source = new DOMSource(doc);   Result result = new StreamResult(w);   Transformer xformer = TransformerFactory.newInstance()     .newTransformer();   xformer.setOutputProperty(OutputKeys.ENCODING, encoding);   xformer.transform(source, result);  } catch (TransformerConfigurationException e) {   e.printStackTrace();  } catch (TransformerException e) {   e.printStackTrace();  } } private void writeXMLFile(String outfile) {  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  DocumentBuilder builder = null;  try {   builder = dbf.newDocumentBuilder();  } catch (Exception e) {  }  Document doc = builder.newDocument();  Element root = doc.createElement("学生花名册");  doc.appendChild(root); // 将根元素添加到文档上  // 获取学生信息  for (int i = 0; i < students_Vector.size(); i++) {   student s = (student) students_Vector.get(i);   // 创建一个学生   Element stu = doc.createElement("学生");   stu.setAttribute("性别", s.getSex());   root.appendChild(stu);// 添加属性      // 创建文本姓名节点   Element name = doc.createElement("姓名");   stu.appendChild(name);   Text tname = doc.createTextNode(s.getName());   name.appendChild(tname);      //创建文本年龄节点   Element age = doc.createElement("年龄");   stu.appendChild(age); // 将age添加到学生节点上   Text tage = doc.createTextNode(String.valueOf(s.getAge()));   age.appendChild(tage); // 将文本节点放在age节点上  }  try {   FileOutputStream fos = new FileOutputStream(outfile);   OutputStreamWriter outwriter = new OutputStreamWriter(fos);   // ((XmlDocument)doc).write(outwriter); //出错!   callWriteXmlFile(doc, outwriter, "gb2312");   outwriter.close();   fos.close();  } catch (Exception e) {   e.printStackTrace();  } } public static void main(String args[]) {  String str = "xml/student.xml";  DomTest t = new DomTest();  try {   Vector v = t.readXMLFile(str);   Iterator it = v.iterator();   while (it.hasNext()) {    student s = (student) it.next();    System.out.println(s.getName() + "\t" + s.getAge() + "\t"      + s.getSex());   }  } catch (Exception e) {   e.printStackTrace();  }  String outfile = "xml/stucopy.xml";  t.writeXMLFile(outfile); }}class student{ private String sex; private String name; private int age; public int getAge() {  return age; } public void setAge(int age) {  this.age = age; } public void setSex(String s){sex=s;} public String getSex(){return sex;} public void setName(String n){name=n;} public String getName(){return name;} }


0 0