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
);
}
}