您的位置:首页 > 编程语言 > Java开发

java读写xml文件

2014-03-07 17:18 363 查看
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;}

}

转自http://blog.sina.com.cn/s/blog_521c63500100ch1j.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: