??1
package
?dom;
??2
??3
import
?java.io.File;
??4
import
?java.io.FileWriter;
??5
import
?java.util.Iterator;
??6
import
?java.util.List;
??7
??8
import
?org.dom4j.Attribute;
??9
import
?org.dom4j.Document;
?10
import
?org.dom4j.DocumentHelper;
?11
import
?org.dom4j.Element;
?12
import
?org.dom4j.io.OutputFormat;
?13
import
?org.dom4j.io.SAXReader;
?14
import
?org.dom4j.io.XMLWriter;
?15
?16
/**?*/
/**
?17
?*?
@author
?~@_@
?18
?
*/
?19
public
?
class
?SimpleDom4j?
{
?20
?21
????
/**?*/
/**
?22
?????*?建立一個XML文檔,文檔名由輸入屬性決定
?23
?????*?
@param
?filename?需建立的文件名?
?24
?????*?
@return
?返回操作結果,?0表失敗,?1表成功????
?25
?????
*/
?26
????
public
?
int
?createXMLFile(String?filename)?
{
?27
????????
/**?*/
/**
?返回操作結果,?0表失敗,?1表成功?
*/
?28
????????
int
?returnValue?
=
?
0
;
?29
????????
/**?*/
/**
?建立document對象?
*/
?30
????????Document?document?
=
?DocumentHelper.createDocument();
?31
????????
/**?*/
/**
?建立XML文檔的根books?
*/
?32
????????Element?booksElement?
=
?document.addElement(
"
books
"
);
?33
????????
/**?*/
/**
?加入一行注釋?
*/
?34
????????booksElement.addComment(
"
This?is?a?test?for?dom4j,?holen,?2004.9.11
"
);
?35
????????
/**?*/
/**
?加入第一個book節點?
*/
?36
????????Element?bookElement?
=
?booksElement.addElement(
"
book
"
);
?37
????????
/**?*/
/**
?加入show屬性內容?
*/
?38
????????bookElement.addAttribute(
"
show
"
,?
"
yes
"
);
?39
????????
/**?*/
/**
?加入title節點?
*/
?40
????????Element?titleElement?
=
?bookElement.addElement(
"
title
"
);
?41
????????
/**?*/
/**
?為title設置內容?
*/
?42
????????titleElement.setText(
"
Dom4j?Tutorials
"
);
?43
????????
/**?*/
/**
?類似的完成后兩個book?
*/
?44
????????bookElement?
=
?booksElement.addElement(
"
book
"
);
?45
????????bookElement.addAttribute(
"
show
"
,?
"
yes
"
);
?46
????????titleElement?
=
?bookElement.addElement(
"
title
"
);
?47
????????titleElement.setText(
"
Lucene?Studing
"
);
?48
????????bookElement?
=
?booksElement.addElement(
"
book
"
);
?49
????????bookElement.addAttribute(
"
show
"
,?
"
no
"
);
?50
????????titleElement?
=
?bookElement.addElement(
"
title
"
);
?51
????????titleElement.setText(
"
Lucene?in?Action
"
);
?52
????????
/**?*/
/**
?加入owner節點?
*/
?53
????????Element?ownerElement?
=
?booksElement.addElement(
"
owner
"
);
?54
????????ownerElement.setText(
"
O'Reilly
"
);
?55
????????
try
?
{
?56
????????????
/**?*/
/**
?將document中的內容寫入文件中?
*/
?57
????????????XMLWriter?writer?
=
?
new
?XMLWriter(
new
?FileWriter(
new
?File(filename)));
?58
????????????writer.write(document);
?59
????????????writer.close();
?60
????????????
/**?*/
/**
?執行成功,需返回1?
*/
?61
????????????returnValue?
=
?
1
;
?62
????????}
?
catch
?(Exception?ex)?
{
?63
????????????ex.printStackTrace();
?64
????????}
?65
????????
return
?returnValue;
?66
????}
?67
?68
????
/**?*/
/**
?69
?????*??修改XML文件中內容,并另存為一個新文件??
?70
?????*??重點掌握dom4j中如何添加節點,修改節點,刪除節點??
?71
?????*??
@param
?filename?修改對象文件??
?72
?????*??
@param
?newfilename?修改后另存為該文件???
?73
?????*??
@return
?返回操作結果,?0表失敗,?1表成功?
?74
?????
*/
?75
????
public
?
int
?ModiXMLFile(String?filename,?String?newfilename)?
{
?76
????????
int
?returnValue?
=
?
0
;
?77
????????
try
?
{
?78
????????????SAXReader?saxReader?
=
?
new
?SAXReader();
?79
????????????Document?document?
=
?saxReader.read(
new
?File(filename));
?80
????????????
/**?*/
/**
?修改內容之一:?如果book節點中show屬性的內容為yes,則修改成no?
*/
?81
????????????
/**?*/
/**
?先用xpath查找對象?
*/
?82
????????????List?list?
=
?document.selectNodes(
"
/books/book/@show
"
);
?83
????????????Iterator?iter?
=
?list.iterator();
?84
????????????
while
?(iter.hasNext())?
{
?85
????????????????Attribute?attribute?
=
?(Attribute)?iter.next();
?86
????????????????
if
?(attribute.getValue().equals(
"
yes
"
))?
{
?87
????????????????????attribute.setValue(
"
no
"
);
?88
????????????????}
?89
????????????}
?90
????????????
/**?*/
/**
???????????
?91
?????????????*??修改內容之二:?把owner項內容改為Tshinghua?
?92
?????????????*??并在owner節點中加入date節點,date節點的內容為2004-09-11,還為date節點添加一個屬性type??????
?93
?????????????
*/
?94
????????????list?
=
?document.selectNodes(
"
/books/owner
"
);
?95
????????????iter?
=
?list.iterator();
?96
????????????
if
?(iter.hasNext())?
{
?97
????????????????Element?ownerElement?
=
?(Element)?iter.next();
?98
????????????????ownerElement.setText(
"
Tshinghua
"
);
?99
????????????????Element?dateElement?
=
?ownerElement.addElement(
"
date
"
);
100
????????????????dateElement.setText(
"
2004-09-11
"
);
101
????????????????dateElement.addAttribute(
"
type
"
,?
"
Gregorian?calendar
"
);
102
????????????}
103
????????????
/**?*/
/**
?修改內容之三:?若title內容為Dom4j?Tutorials,則刪除該節點?
*/
104
????????????list?
=
?document.selectNodes(
"
/books/book
"
);
105
????????????iter?
=
?list.iterator();
106
????????????
while
?(iter.hasNext())?
{
107
????????????????Element?bookElement?
=
?(Element)?iter.next();
108
????????????????Iterator?iterator?
=
?bookElement.elementIterator(
"
title
"
);
109
????????????????
while
?(iterator.hasNext())?
{
110
????????????????????Element?titleElement?
=
?(Element)?iterator.next();
111
????????????????????
if
?(titleElement.getText().equals(
"
Dom4j?Tutorials
"
))?
{
112
????????????????????????bookElement.remove(titleElement);
113
????????????????????}
114
????????????????}
115
????????????}
116
????????????
try
?
{
117
????????????????
/**?*/
/**
?將document中的內容寫入文件中?
*/
118
????????????????XMLWriter?writer?
=
?
new
?XMLWriter(
new
?FileWriter(
new
?File(
119
????????????????????????newfilename)));
120
????????????????writer.write(document);
121
????????????????writer.close();
122
????????????????
/**?*/
/**
?執行成功,需返回1?
*/
123
????????????????returnValue?
=
?
1
;
124
????????????}
?
catch
?(Exception?ex)?
{
125
????????????????ex.printStackTrace();
126
????????????}
127
????????}
?
catch
?(Exception?ex)?
{
128
????????????ex.printStackTrace();
129
????????}
130
????????
return
?returnValue;
131
????}
132
133
????
/**?*/
/**
134
?????*??格式化XML文檔,并解決中文問題
135
?????*??
@param
?filename
136
?????*??
@return
137
?????
*/
138
????
public
?
int
?formatXMLFile(String?filename)?
{
139
????????
int
?returnValue?
=
?
0
;
140
????????
try
?
{
141
????????????SAXReader?saxReader?
=
?
new
?SAXReader();
142
????????????Document?document?
=
?saxReader.read(
new
?File(filename));
143
????????????XMLWriter?writer?
=
?
null
;
144
????????????
/**?*/
/**
?格式化輸出,類型IE瀏覽一樣?
*/
145
????????????OutputFormat?format?
=
?OutputFormat.createPrettyPrint();
146
????????????
/**?*/
/**
?指定XML編碼?
*/
147
????????????format.setEncoding(
"
GBK
"
);
148
????????????writer?
=
?
new
?XMLWriter(
new
?FileWriter(
new
?File(filename)),?format);
149
????????????writer.write(document);
150
????????????writer.close();
151
????????????
/**?*/
/**
?執行成功,需返回1?
*/
152
????????????returnValue?
=
?
1
;
153
????????}
?
catch
?(Exception?ex)?
{
154
????????????ex.printStackTrace();
155
????????}
156
????????
return
?returnValue;
157
????}
158
}

??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
