Java使用dom读取xml文件

Java使用dom读取xml文件

附上源码:

student.xml

<?xml version="1.0" encoding="GB2312"?>
<content>
<student age="21" name="张三" sex="男">
<course name="数学" scores="80"/>
<course name="语文" scores="90"/>
</student>
<student age="22" name="李四" sex="男">
<course name="数学" scores="88"/>
<course name="语文" scores="92"/>
</student>
</content>

student.java

student.java
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
          
          
package test . code2 ;
import java.util.ArrayList ;
public class student {
private String sex ;
private String name ;
private int age ;
private ArrayList coure ;
............. get / set ......
}

Course.java

Course.java
 1
 2
 3
 4
 5
 6
 7
 8
          
          
package test . code2 ;
public class Course {
private String cname ;
private String scores ;
......... get / set .....
}

DomTest.java

DomTest.java
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
          
          
package test . code2 ;
import java.io.FileOutputStream ;
import java.io.OutputStreamWriter ;
import java.io.Writer ;
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.NodeList ;
import java.util.ArrayList ;
public class DomTest {
Vector < student > 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 ( "student" );
students_Vector = new Vector < student >();
for ( int i = 0 ; i < students . getLength (); i ++) {
// 一次取得每一个学生元素
Element sts = ( Element ) students . item ( i );
// 创建一个学生的实例
student stu = new student ();
stu . setSex ( sts . getAttribute ( "sex" ));
stu . setName ( sts . getAttribute ( "name" ));
stu . setAge ( Integer . parseInt ( sts . getAttribute ( "age" )));
System . out . println ( "学生:" + sts . getAttribute ( "name" ) + ","
+ sts . getAttribute ( "sex" ) + "," + sts . getAttribute ( "age" ));
/*
* NodeList names = ss.getElementsByTagName("name"); Element e =
* (Element) names.item(0); Node t = e.getFirstChild();
* stu.setName(t.getNodeValue()); NodeList ages =
* ss.getElementsByTagName("age"); e = (Element) ages.item(0); t =
* e.getFirstChild();
* stu.setAge(Integer.parseInt(t.getNodeValue()));
*/
ArrayList < Course > arr = new ArrayList < Course >();
NodeList cc = sts . getElementsByTagName ( "course" );
for ( int j = 0 ; j < cc . getLength (); j ++) {
Course cre = new Course ();
Element cca = ( Element ) cc . item ( j );
cre . setCname ( cca . getAttribute ( "name" ));
cre . setScores ( cca . getAttribute ( "scores" ));
arr . add ( cre );
System . out . println ( " " + cca . getAttribute ( "name" ) + " "
+ cca . getAttribute ( "scores" ));
}
stu . setCoure ( arr );
students_Vector . add ( stu );
}
return students_Vector ;
}
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 ( "content" );
doc . appendChild ( root ); // 将根元素添加到文档上
// 获取学生信息
for ( int i = 0 ; i < students_Vector . size (); i ++) {
student s = ( student ) students_Vector . get ( i );
// 创建一个学生
Element stu = doc . createElement ( "student" );
stu . setAttribute ( "sex" , s . getSex ());
stu . setAttribute ( "age" , String . valueOf ( s . getAge ()));
stu . setAttribute ( "name" , s . getName ());
// stu.setAttribute("age", s.getAge());
root . appendChild ( stu ); // 添加属性
for ( int j = 0 ; j < 2 ; j ++) {
Course ur = ( Course ) s . getCoure (). get ( j );
Element ss = doc . createElement ( "course" );
ss . setAttribute ( "name" , ur . getCname ());
ss . setAttribute ( "scores" , ur . getScores ());
stu . appendChild ( ss );
}
}
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 ();
}
}
// 写入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 ();
}
}
/**
* @param args
*/
public static void main ( String [] args ) {
String str = "d:/xml/studentcopy.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());
//
// ArrayList arr = s.getCoure();
// for(int a=0; a<arr.size(); a++){
// Course ur = (Course)arr.get(a);
// System.out.println(ur.getCname()+","+ur.getScores());
// }
// }
} catch ( Exception e ) {
e . printStackTrace ();
System . out . println ( e . toString ());
}
String outfile = "d:/xml/student.xml" ;
t . writeXMLFile ( outfile );
}
}


完成!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值