• java通过dom读写xml文件


    java通过dom读写xml文件

    要读的xml文件

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

    package xml;

    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() + " " + s.getAge() + " "
          + 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;}
     }

  • 相关阅读:
    ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 17 电话号码的字母组合
  • 原文地址:https://www.cnblogs.com/muyuhu/p/3661872.html
Copyright © 2020-2023  润新知