日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

XML代碼-如何使用DOM解析xml,打印xml文檔信息工具類

 N_once 2008-01-23

http://blog.csdn.net/l_010204019/archive/2007/08/14/1742694.aspx
學(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") ;
            
//獲得該集合的長度
            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)營糧油大米食品</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


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多