學(xué)習(xí)時(shí)仿照書上例子自己練習(xí)編寫的.加上了很多注釋,應(yīng)該以后的工作學(xué)習(xí)能用上.也算資料儲(chǔ)備吧.
一.使用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)
{
//獲得一個(gè)工廠類的實(shí)例
DocumentBuilderFactory bdf =DocumentBuilderFactory.newInstance();
try
{
//獲得解析器封裝的DOM解析器
DocumentBuilder db=bdf.newDocumentBuilder();
//指定要分析的xml文檔
File f=new File("Department.xml");
//獲得xml文檔的對(duì)象
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") ;
//獲得該集合的長(zhǎng)度
int len=nl.getLength();
for(int i=0;i<len;i++)
{
//獲取該集合第i個(gè)出現(xiàn)的Node對(duì)象
Node nod=nl.item(i);
//將起強(qiáng)制轉(zhuǎn)換為其父類Element
Element elNod=(Element) nod;
//這里文本部分為文本節(jié)點(diǎn).必須使用其自身的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 自動(dòng)生成 catch 塊
e.printStackTrace();
}
catch (SAXException e)
{
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自動(dòng)生成 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)營(yíng)糧油大米食品</depInfo>
</department> 二 使用DOM解析器遞歸遍歷DOM節(jié)點(diǎn)樹 (最近修改 by 07-8-14)
文件:XmlInfoPrint.java,Books.xml.
說明:將xerces2.9的xercesImp.jar導(dǎo)入Project.
XmlInfoPrint.java (可以作為工具類來使用,打印出xml文檔基本信息.可以根據(jù)以后項(xiàng)目需要再完善功能)
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é)點(diǎn)名稱以及其值,將不顯示非元素文本的文本節(jié)點(diǎn)
*/
{
if(node.getNodeName()!="#text") //name="#text"的文本節(jié)點(diǎn)不作為輸出
System.out.println(node.getNodeName()+" :" );
if(node.getNodeValue()!=null||node.getNodeName()=="#text")
System.out.println(node.getNodeValue());
}
public static void searchNode(Node node)
/**
* 遍歷文檔所有節(jié)點(diǎn)元素,并將其通過pritnInfomation(Node node)來打印出來
*/
{
short type=node.getNodeType();//獲取節(jié)點(diǎn)元素的類型
switch (type)
{
case Node.PROCESSING_INSTRUCTION_NODE:
printInfomation(node);
break;
case Node.ELEMENT_NODE:
printInfomation(node);
//若元素節(jié)點(diǎn)有屬性節(jié)點(diǎn)則將其打印出來
if(node.hasAttributes())
{
NamedNodeMap attr=node.getAttributes();//獲取節(jié)點(diǎn)的屬性節(jié)點(diǎn)的集合,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();
}
}
/**
* @param args
*/
public static void main(String[] args)
{
// TODO 自動(dòng)生成方法存根
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder db=dbf.newDocumentBuilder();
File f=new File("Books.xml");
Document book=db.parse(f);
XmlInfoPrint.searchNode(book);
}
catch (ParserConfigurationException e)
{
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
}
catch (SAXException e)
{
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
}
}
}
Books.xml
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="book.xsl"?>
<books>
<book id="0001">
<名稱>Eclipse從入門到精通(第2版珍藏版)(附盤)</名稱>
<作者>陳剛</作者>
<出版社>清華大學(xué)出版社</出版社>
<價(jià)格>¥46.70</價(jià)格>
</book>
<book id="0002">
<名稱>Java編程思想(第4版)(中文版)</名稱>
<作者>(美)Bruce Eckel</作者>
<出版社>機(jī)械工業(yè)出版社</出版社>
<價(jià)格>¥88.20</價(jià)格>
</book>
<book id="0003">
<名稱>VC++深入詳解(附光盤)/孫鑫作品系列</名稱>
<作者>孫鑫 余安萍</作者>
<出版社>電子工業(yè)出版社</出版社>
<價(jià)格>¥67.70</價(jià)格>
</book>
<book id="0004">
<名稱>WebWork in Action中文版</名稱>
<作者>(美)Patrick Lightbody、Jason Carreira</作者>
<出版社>電子工業(yè)出版社</出版社>
<價(jià)格>¥35.40</價(jià)格>
</book>
<book id="0005">
<名稱>
Java Web開發(fā)詳解--XML+XSLT+Servlet+JSP深入剖析與實(shí)例應(yīng)用(附光盤)/孫鑫作品系列
</名稱>
<作者>孫鑫</作者>
<出版社>電子工業(yè)出版社</出版社>
<價(jià)格>¥73.90</價(jià)格>
</book>
</books> Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1741467