ljf2999
posts - 2, comments - 1, trackbacks - 0, articles - 9
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
DOM:parse and print XML document
Posted on 2006-11-30 14:38
ljf2999
阅读(215)
评论(0)
编辑
收藏
所属分类:
JDOM.DOM
1
package
doms;
2
3
import
javax.xml.parsers.
*
;
//
这个包被包括在j2ee 1.4.2 API中。
4
import
org.w3c.dom.
*
;
//
这个包被包括在j2se 1.5.0 API中。
5
import
org.xml.sax.
*
;
//
这个包被包括在j2ee 1.5.0 API中。
6
7
8
public
class
Dom6
{
9
public
static
void
main(String[] args)
{
10
Dom6 d6
=
new
Dom6();
11
System.out.println(d6.parseXML(
"
K:/test11/xml/test.xml
"
));
12
}
13
14
15
16
private
String getDocumentType(Document doc)
{
//
获取DocumentType信息。为简单起见,不涉及对Entity等的解析。
17
StringBuffer sb
=
new
StringBuffer();
18
DocumentType type
=
doc.getDoctype();
19
String name
=
type.getName();
20
String publicId
=
type.getPublicId();
21
String systemId
=
type.getSystemId();
22
if
(name
==
null
)
return
""
;
23
24
sb.append(
"
<!DOCTYPE
"
+
name);
25
sb.append(publicId
==
null
?
""
:
"
PUBLIC \
""
+ publicId +
"
\
""
);
26
sb.append(systemId
==
null
?
""
:
"
\
""
+ systemId +
"
\
""
);
27
sb.append(
"
>\n
"
);
28
return
sb.toString();
29
}
30
private
String getElementAttrs(Node node)
{
//
获取一个Element的所有Attribute。
31
StringBuffer attrs
=
new
StringBuffer();
32
if
(node.hasChildNodes())
{
33
NamedNodeMap map
=
node.getAttributes();
34
for
(
int
i
=
0
; i
<
map.getLength(); i
++
)
{
35
Node attr
=
map.item(i);
36
attrs.append(
"
"
+
attr.getNodeName()
+
"
=\
""
+ attr.getNodeValue() +
"
\
""
);
37
}
38
}
39
return
attrs.toString();
40
}
41
private
String getXMLHeader(Document doc)
{
//
获取XML头定义。
42
StringBuffer header
=
new
StringBuffer();
43
String encoding
=
doc.getXmlEncoding();
44
String version
=
doc.getXmlVersion();
45
boolean
standalone
=
doc.getXmlStandalone();
46
if
(version
==
null
||
encoding
==
null
)
return
""
;
//
如果没有定义XML头,则返回空串。
47
header.append(
"
<?xml
"
);
48
header.append(
"
version=\
""
+ version +
"
\
""
);
49
header.append(
"
encoding=\
""
+ encoding +
"
\
""
);
50
header.append(standalone
==
false
?
""
:
"
standalone=\
"
true
\
""
);
51
header.append(
"
?>\n
"
);
52
return
header.toString();
53
}
54
private
StringBuffer circle(NodeList list, StringBuffer sb)
{
//
递归调用,获取所有Element和Node。
55
for
(
int
i
=
0
; i
<
list.getLength(); i
++
)
{
56
Node node
=
list.item(i);
57
if
(node.hasChildNodes())
{
//
如果该节点含有子节点,表明它是一个Element。
58
String nodeName
=
node.getNodeName();
59
sb.append(
"
<
"
+
nodeName
+
this
.getElementAttrs(node)
+
"
>
"
);
//
获取该Element的所有Attribute。
60
sb
=
this
.circle(node.getChildNodes(), sb);
//
递归调用,操作该Element的子节点。
61
sb.append(
"
</
"
+
nodeName
+
"
>
"
);
62
}
else
if
(node.getNodeType()
==
Node.COMMENT_NODE)
{
//
检查这个非Element节点是否是注释。
63
sb.append(
"
<!--
"
+
node.getNodeValue()
+
"
-->
"
);
64
}
else
{
65
sb.append(node.getNodeValue());
66
}
67
}
68
return
sb;
69
}
70
private
String parseXML(String xmlFile)
{
//
解析一个XML文档。
71
StringBuffer sb
=
new
StringBuffer(
"
///////// ParseXML //////////\n
"
);
72
try
{
73
javax.xml.parsers.DocumentBuilderFactory factory
=
DocumentBuilderFactory.newInstance();
74
javax.xml.parsers.DocumentBuilder builder
=
factory.newDocumentBuilder();
75
org.w3c.dom.Document doc
=
builder.parse(xmlFile);
//
获取XML文档.
76
77
sb.append(
this
.getXMLHeader(doc));
//
获取XML头定义。
78
79
80
81
sb.append(
this
.getDocumentType(doc));
//
获取DocumentType信息。
82
83
org.w3c.dom.Element rootElement
=
doc.getDocumentElement();
//
获取根元素。
84
String rootTagName
=
rootElement.getTagName();
85
sb.append(
"
<
"
+
rootTagName
+
this
.getElementAttrs(rootElement)
+
"
>
"
);
86
if
(rootElement.hasChildNodes())
{
//
一般来说,根元素肯定存在子节点。
87
sb
=
this
.circle(rootElement.getChildNodes(), sb);
//
递归调用,操作根元素的子节点。
88
}
89
sb.append(
"
</
"
+
rootTagName
+
"
>
"
);
90
}
catch
(javax.xml.parsers.ParserConfigurationException pce)
{
91
92
}
catch
(org.xml.sax.SAXException se)
{
93
94
}
catch
(java.io.IOException ioe)
{
95
96
}
97
return
sb.toString();
98
}
99
}
100
101
102
K:
/
test11
/
xml
/
test.xml
103
104
<?
xml version
=
"
1.0
"
encoding
=
"
GBK
"
?>
105
<!
DOCTYPE web
-
app PUBLIC
"
-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
"
"
http://java.sun.com/dtd/web-app_2_3.dtd
"
>
106
107
<
web
-
app
>
108
<!--
Display Name Field
-->
109
<
display
-
name
>
adfadfadsdsafsda
</
display
-
name
>
110
<!--
Servlet Defination
-->
111
<
servlet
>
112
<
servlet
-
name
>
Dom1
</
servlet
-
name
>
113
<
servlet
-
class
>
doms.Dom1
</
servlet
-
class
>
114
<
init
-
param
>
115
<
param
-
name
>
name
</
param
-
name
>
116
<
param
-
value
>
bitan
</
param
-
value
>
117
</
init
-
param
>
118
</
servlet
>
119
<!--
Listener List
-->
120
<
listener
>
121
<
listener
-
class
>
doms.ListenerClass
</
listener
-
class
>
122
</
listener
>
123
<!--
Tag Library Mapping
-->
124
<
taglib
>
125
<
taglib
-
uri
>
tag1.tld
</
taglib
-
uri
>
126
<
taglib
-
location
>/
WEB
-
INF
/
tlds
/
tag1.tld
</
taglib
-
location
>
127
</
taglib
>
128
129
<!--
自定义的一个标记。用来测试对Attribute和TextNode的解析情况
-->
130
<
myself
-
tag author
=
"
bitan
"
email
=
"
ggjj_zhzz@163.com
"
>
131
下面是一些信息:
132
<
test
-
time
>
2005年1月14日
</
test
-
time
>
133
<
jdk
-
version nickname
=
"
tiger
"
>
j2sdk
1.5
.0_01
</
jdk
-
version
>
134
<
text
-
editer
>
UltraEdit
-
32
</
text
-
editer
>
135
测试结束。
136
</
myself
-
tag
>
137
</
web
-
app
>
138
139
140
结果:
141
K:\test11
>
javac
-
classpath
%
classpath
%
-
d .\web
-
inf\classes .\src\Dom6.java
142
143
K:\test11
>
java
-
classpath .\web
-
inf\classes doms.Dom6
144
////////
/ ParseXML
//////////
145
<?
xml version
=
"
1.0
"
encoding
=
"
GBK
"
?>
146
<!
DOCTYPE web
-
app PUBLIC
"
-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN
147
"
"
http:
//
java.sun.com/dtd/web-app_2_3.dtd">
148
<
web
-
app
>
149
<!--
Display Name Field
-->
150
<
display
-
name
>
adfadfadsdsafsda
</
display
-
name
>
151
<!--
Servlet Defination
-->
152
<
servlet
>
153
<
servlet
-
name
>
Dom1
</
servlet
-
name
>
154
<
servlet
-
class
>
doms.Dom1
</
servlet
-
class
>
155
<
init
-
param
>
156
<
param
-
name
>
name
</
param
-
name
>
157
<
param
-
value
>
bitan
</
param
-
value
>
158
</
init
-
param
>
159
</
servlet
>
160
<!--
Listener List
-->
161
<
listener
>
162
<
listener
-
class
>
doms.ListenerClass
</
listener
-
class
>
163
</
listener
>
164
<!--
Tag Library Mapping
-->
165
<
taglib
>
166
<
taglib
-
uri
>
tag1.tld
</
taglib
-
uri
>
167
<
taglib
-
location
>/
WEB
-
INF
/
tlds
/
tag1.tld
</
taglib
-
location
>
168
</
taglib
>
169
170
171
172
<!--
自定义的一个标记。用来测试对Attribute和TextNode的解析情况
-->
173
<
myself
-
tag author
=
"
bitan
"
email
=
"
ggjj_zhzz@163.com
"
>
174
下面是一些信息:
175
<
test
-
time
>
2005年1月14日
</
test
-
time
>
176
<
jdk
-
version nickname
=
"
tiger
"
>
j2sdk
1.5
.0_01
</
jdk
-
version
>
177
<
text
-
editer
>
UltraEdit
-
32
</
text
-
editer
>
178
测试结束。
179
</
myself
-
tag
>
180
</
web
-
app
>
181
182
K:\test11
>
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
JDOM:test1.1
JDOM:test1.0(NetBeans5.5)
DOM:write xml
DOM:parse and print XML document
Powered by:
BlogJava
Copyright © ljf2999
日历
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
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
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2006年11月 (2)
文章分类
Arithmetic(1)
Downloads temp
JDOM.DOM(4)
S.S.Hibernate(4)
文章档案
2007年6月 (3)
2006年12月 (2)
2006年11月 (3)
2006年7月 (1)
相册
test
!Oracle
DBA notes
一些零散在各地的原创Oracle技术文章
!s.s.hibernate
Spring JdbcTemplate in struts
!通航Blogs
《CSDN社区电子杂志——Java杂志》官方blog
Computerboy
darkz
finallong的咚咚嘻嘻
It is time for change!
itpub_Kamus(斑竹)
itpub_tigerfish(pub建筑师?)
JGoodies Forms
polygoncell(msn)
pure2008
分享Java快乐
古埃及象形文字
老康的专栏
1Favor Webs
codechina
it bulo
javawebstudio
lumaqq
open-open
开复学生网
ajax
Ajax Resources
How to Drag&Drop in JS
Javascript实现鼠标拖拽网页表单
arithmetic
算法驿站(rickone 的 BLOG)
freemarker
FreeMarker一篇通
S.S.H.Freemarker新闻系统
WebWork2->FreeMarker
jdom
jdom deal xml
jdom detail
jdom detail and examples
jdom read xml
MySql
MySQL.cn
Other tech...
JGoodies Forms
璞翼工作室博客
Other z...
jfcms
turbocms
搜索
最新评论
1. re: 心灵秘境
woding
--ljf2999
阅读排行榜
1. 心灵秘境(148)
2. 世上最经典的25句话(139)
评论排行榜
1. 心灵秘境(1)
2. 世上最经典的25句话(0)