博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java通过dom读写xml文件
阅读量:5131 次
发布时间:2019-06-13

本文共 4310 字,大约阅读时间需要 14 分钟。

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() + "\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;}
 }

转载于:https://www.cnblogs.com/muyuhu/p/3661872.html

你可能感兴趣的文章
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>