电竞比分网-中国电竞赛事及体育赛事平台
搜索
我的圖書館
查看信箱
系統(tǒng)消息
官方通知
設(shè)置
開始對話
有
11
人和你對話,
查看
忽略
歷史對話記錄
通知設(shè)置
發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
搜索
分享
QQ空間
QQ好友
新浪微博
微信
生成長圖
轉(zhuǎn)Word
打印
朗讀
全屏
修改
轉(zhuǎn)藏
+1
XML代碼-如何使用DOM解析xml,打印xml文檔信息工具類
N_once
2008-01-23
|
轉(zhuǎn)藏
大
中
小
展開全文
上一篇: XML代碼-修改DOM樹函數(shù),初始化DOM解析對象,DOM樹轉(zhuǎn)化xml文檔修改DOM樹函數(shù),初始化DOM解析對象,DOM樹轉(zhuǎn)化xml文檔
|
下一篇: XML學(xué)習(xí)摘要(待續(xù)中...)
http://blog.csdn.net/l_010204019/archive/2007/08/14/1742694.aspx
XML代碼-如何使用DOM解析xml,打印xml文檔信息工具類
學(xué)習(xí)時仿照書上例子自己練習(xí)編寫的.加上了很多注釋,應(yīng)該以后的工作學(xué)習(xí)能用上.也算資料儲備吧.
一.使用DOM來解析xml文檔.
文件:DepartmentInfo.java,Department.xml.
說明:將xerces2.9的xercesImp.jar導(dǎo)入Project.
DepartmentInfo.java
import
java.io.File;
import
java.io.IOException;
import
javax.xml.parsers.DocumentBuilder;
import
javax.xml.parsers.DocumentBuilderFactory;
import
javax.xml.parsers.ParserConfigurationException;
import
org.w3c.dom.
*
;
import
org.xml.sax.SAXException;
public
class
DepartmentInfo
{
public
static
void
main(String [] args)
{
//
獲得一個工廠類的實例
DocumentBuilderFactory bdf
=
DocumentBuilderFactory.newInstance();
try
{
//
獲得解析器封裝的DOM解析器
DocumentBuilder db
=
bdf.newDocumentBuilder();
//
指定要分析的xml文檔
File f
=
new
File(
"
Department.xml
"
);
//
獲得xml文檔的對象
Document dep
=
db.parse(f);
System.out.println( dep.getDocumentElement().getTagName());
//
**************以上步驟是所有使用DOM解析xml文檔所必須的3步驟************
//
//
這里是獲得所有dep下的所有名為deopartment,并且按照在xml文檔出現(xiàn)次序的Node集合
NodeList nl
=
dep.getElementsByTagName(
"
department
"
) ;
//
獲得該集合的長度
int
len
=
nl.getLength();
for
(
int
i
=
0
;i
<
len;i
++
)
{
//
獲取該集合第i個出現(xiàn)的Node對象
Node nod
=
nl.item(i);
//
將起強制轉(zhuǎn)換為其父類Element
Element elNod
=
(Element) nod;
//
這里文本部分為文本節(jié)點.必須使用其自身的getNodeValue()方法才能返回值
String depname
=
elNod.getElementsByTagName(
"
Zh
"
).item(
0
).getChildNodes().item(
0
).getNodeValue();
String depadress
=
elNod.getElementsByTagName(
"
depadress
"
).item(
0
).getChildNodes().item(
0
).getNodeValue();
String depInfo
=
elNod.getElementsByTagName(
"
depInfo
"
).item(
0
).getChildNodes().item(
0
).getNodeValue();
//
**********以下是打印格式*****************************************
//
/
System.out.print(
"
部門名稱:
"
+
depname);
System.out.println(
"
"
+
elNod.getElementsByTagName(
"
En
"
).item(
0
).getChildNodes().item(
0
).getNodeValue());
System.out.println(
"
部門所在地:
"
+
depadress);
System.out.println(
"
部門信息:
"
+
depInfo);
System.out.println(
"
------------------------------------------------
"
);
}
}
catch
(ParserConfigurationException e)
{
//
TODO 自動生成 catch 塊
e.printStackTrace();
}
catch
(SAXException e)
{
//
TODO 自動生成 catch 塊
e.printStackTrace();
}
catch
(IOException e)
{
//
TODO 自動生成 catch 塊
e.printStackTrace();
}
}
}
Department.xml
<?
xml version="1.0" encoding="gb2312"
?>
<?
xml-stylesheet type="text/xsl" href="Department.xsl"
?>
<
department
>
<
depname
>
<
Zh
>
大大發(fā)
</
Zh
>
<
En
>
BigandRich
</
En
>
</
depname
>
<
depadress
>
廣州市中山三路
</
depadress
>
<
depInfo
>
經(jīng)營糧油大米食品
</
depInfo
>
</
department
>
二 使用DOM解析器遞歸遍歷DOM節(jié)點樹 (最近修改 by 07-8-14)
文件:XmlInfoPrint.java,Books.xml.
說明:將xerces2.9的xercesImp.jar導(dǎo)入Project.
XmlInfoPrint.java (可以作為工具類來使用,打印出xml文檔基本信息.可以根據(jù)以后項目需要再完善功能)
import
java.io.File;
import
java.io.IOException;
import
javax.xml.parsers.DocumentBuilder;
import
javax.xml.parsers.DocumentBuilderFactory;
import
javax.xml.parsers.ParserConfigurationException;
import
org.w3c.dom.
*
;
import
org.xml.sax.SAXException;
public
class
XmlInfoPrint
{
public
static
void
printInfomation(Node node)
/**
* 打印元素節(jié)點名稱以及其值,將不顯示非元素文本的文本節(jié)點
*/
{
if
(node.getNodeName()
!=
"
#text
"
)
//
name="#text"的文本節(jié)點不作為輸出
System.out.println(node.getNodeName()
+
"
:
"
);
if
(node.getNodeValue()
!=
null
||
node.getNodeName()
==
"
#text
"
)
System.out.println(node.getNodeValue());
}
public
static
void
searchNode(Node node)
/**
* 遍歷文檔所有節(jié)點元素,并將其通過pritnInfomation(Node node)來打印出來
*/
{
short
type
=
node.getNodeType();
//
獲取節(jié)點元素的類型
switch
(type)
{
case
Node.PROCESSING_INSTRUCTION_NODE:
printInfomation(node);
break
;
case
Node.ELEMENT_NODE:
printInfomation(node);
//
若元素節(jié)點有屬性節(jié)點則將其打印出來
if
(node.hasAttributes())
{
NamedNodeMap attr
=
node.getAttributes();
//
獲取節(jié)點的屬性節(jié)點的集合,NamedNodeMap是live的
int
len
=
attr.getLength();
for
(
int
i
=
0
;i
<
len;i
++
)
{
System.out.print(
"
ID=
"
+
attr.item(i).getNodeValue());
}
}
break
;
case
Node.TEXT_NODE:
printInfomation(node);
break
;
default
:
break
;
}
Node child
=
node.getFirstChild();
while
(child
!=
null
)
{
searchNode(child);
child
=
child.getNextSibling();
}
}
/**