• 
    

      <address id="upfr9"><pre id="upfr9"><strike id="upfr9"></strike></pre></address>
      1. <address id="upfr9"><tr id="upfr9"></tr></address><dl id="upfr9"></dl>

        XML文檔和JTree之間轉(zhuǎn)換方法-創(chuàng)新互聯(lián)

        今天小編為大家?guī)硪黄猉ML文檔和JTree之間轉(zhuǎn)換方法的文章。小編覺得挺不錯的,為此分享給大家做個參考。一起跟隨小編過來看看吧。

        寧陽網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),寧陽網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為寧陽近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的寧陽做網(wǎng)站的公司定做!

        XML因?yàn)榱己玫慕Y(jié)構(gòu),被廣泛地應(yīng)用于文檔格式的定義。我們知道,應(yīng)用軟件一般需要用配置文件來決定運(yùn)行時的一些參數(shù)。以前的應(yīng)用程序的配置文件一般是一個.ini文件。雖然現(xiàn)在,ini文件仍然在使用,但是由于XML的出現(xiàn),越來越多的商用軟件正在把XML當(dāng)作配置文件的格式,如BEA的Weblogic,以及IBM的Websphere等。所以,當(dāng)我們設(shè)計一個軟件的配置文件時,將會越來越多地考慮使用XML作為該配置文件的格式。

        而因?yàn)榕渲梦募袝r候必須讓用戶修改,所以提供一個可視化的編輯配置文件的格式,是一個軟件具有良好的用戶可交互性的體現(xiàn)。我們必須給XML文檔找到一個可視化的方法。Java語言中的Swing組件里面的JTree,用于XML文檔的可視化是非常適合的。這兩者之間存在著很方便的轉(zhuǎn)換方法。這就意味著我們能將用戶在JTree上面的操作,在存盤后方便地表現(xiàn)為在XML文件中的修改,也能將XML文件方便地表現(xiàn)為一棵JTree展現(xiàn)給用戶。

        XML文檔的可視化

        一個XML文檔其實(shí)是一個樹形的結(jié)構(gòu)。比如下面這個XML文檔:

        <?xml version=“1.0”encoding=“GB2312”?>
        <skin>
          <skin1>
            <name>古典</name>
            <dir>d:\software\App\skin</dir>
            <head>head1.bmp</head>
            <center>center1.bmp</center>
            <foot>foot1.bmp</foot>
          </skin1>
        <skin2>
            <name>現(xiàn)代</name>
            <dir>d:\software\App\skin</dir>
            <head>head2.bmp</head>
            <center>center2.bmp</center>
            <foot>foot2.bmp</foot>
          </skin2>
        </skin>

        可以看得出來,該XML文檔是一個多界面程序的界面圖片配置程序,如果將該XML文檔可視化,那么使用JTree的話應(yīng)該得到的是如下圖所示的結(jié)果。

        XML文檔和JTree之間轉(zhuǎn)換方法

        圖 可視化結(jié)果

        所有的XML文檔,都能夠生成這樣一個Jtree。使用XML的Parser和Java里的JTree類,可以構(gòu)造出一個通用的可視化XML文檔從而構(gòu)成一棵JTree。XML Parser對XML文檔解析的結(jié)果是生成一顆DOM(Document Object Model)樹,DOM樹的結(jié)構(gòu)和JTree的結(jié)構(gòu)其實(shí)是一樣的,這使JTree和XML Parser的配合非常自然。下面就介紹一下做法。

        一個讀寫XML文件的類

        首先必須獲得XML Parser的包,可以從下面的地址獲得:http://xml.apache.org/xerces2-j/index.html。
        然后設(shè)計一個XMLTree的類,繼承自JTree類的定義和成員變量,函數(shù)定義如下:

        public class XMLTree extends JTree{   
            private           DefaultMutableTreeNode      treeNode;  //JTree的根節(jié)點(diǎn)
            private           DocumentBuilderFactory     dbf; 
            // 這三個成員變量是xml parser需要的
            private           DocumentBuilder         db; 
            private           Document              doc;  
            XMLTree(String fileName);  
            //構(gòu)造函數(shù),做初始化工作
            public DefaultMutableTreeNode LoadFile(Node root);     
            //從某個XML文件生成該樹
            public void SaveToFile(DefaultMutableTreeNode root,FileWriter fw);     
            //將該樹存盤成XML文件
            private Node parseXml( String text )
        }

        其中構(gòu)造函數(shù)所做的初始化工作如下:

        XMLTree(String fileName){
              dbf = DocumentBuilderFactory.newInstance(); 
              //生成dbf的實(shí)例
              db = dbf.newDocumentBuilder();  
              //生成db的實(shí)例
              treeNode = LoadFile( getXMLRoot( text ) );  
              //解析該xml文件,返回JTree的根節(jié)點(diǎn)
              setModel( new DefaultTreeModel( treeNode ) );  
              //根據(jù)該根節(jié)點(diǎn)生成JTree
        }

        其中,parseXml是一個返回XML文件根元素的程序,如下:

        private Node getXMLRoot( String text ){
                 ByteArrayInputStream    byteStream;
                 byteStream = new ByteArrayInputStream( text.getBytes() ); 
                 //將XML文件讀到Stream里去
                 try{
                   doc = db.parse( byteStream );  
                   //解析該xml文件。
                 } catch ( Exception e )
                 { e.printStackTrace();}
                 return ( Node )doc.getDocumentElement();
                    //返回該XML文件的DOM樹的根元素
        }

        核心部分的LoadFile是一個遞歸過程,如下:

        private DefaultMutableTreeNode createTreeNode( Node root ){
              DefaultMutableTreeNode  treeNode = null; 
                 //定義要返回的根節(jié)點(diǎn)
              String name = root.getNodeName();
                 //獲得該節(jié)點(diǎn)的NodeName
                 String value = root.getNodeValue(); 
                 //獲得該節(jié)點(diǎn)的NodeValue
             treeNode = new DefaultMutableTreeNode( root.
        getNodeType() == Node.TEXT_NODE ? value : name );
              //如果為值節(jié)點(diǎn),那么取得該節(jié)點(diǎn)的值,否則取得該節(jié)點(diǎn)的Tag的名字 
              if ( root.hasChildNodes() ) 
              //如果該節(jié)點(diǎn)有孩子節(jié)點(diǎn),那么遞歸處理該節(jié)點(diǎn)的孩子節(jié)點(diǎn)
              {  NodeList children = root.getChildNodes();  
                //取得該節(jié)點(diǎn)的子節(jié)點(diǎn)列表
                 if( children != null ){       
                 //判斷子節(jié)點(diǎn)是否為空
                  int numChildren = children.getLength();  
                   //取得字節(jié)數(shù)目
                    for (int i=0; i < numChildren; i++){  
                       Node node = children.item(i); 
                          //循環(huán)處理每個子節(jié)點(diǎn)
                       if( node != null )
                       {  if( node.getNodeType() == Node.ELEMENT_NODE )
                          { treeNode.add( createTreeNode(node) ); 
                          //如果該子節(jié)點(diǎn)還有孩子節(jié)點(diǎn)使用遞歸的方法處理該子節(jié)點(diǎn)
                          } else {
                         String data = node.getNodeValue();
                          if( data != null )
                          {
                             data = data.trim();
                             if ( !data.equals(“\n”) && !data.equals(“\r\n”) && 
        data.length() > 0 )
                             {    treeNode.add(new 
        DefaultMutableTreeNode(node.getNodeValue()));
                               //如果該節(jié)點(diǎn)沒有孩子節(jié)點(diǎn),那么直接加到節(jié)點(diǎn)下
                               }   
                           }  
                         } 
                       } 
                    }
                 }
              } 
              return treeNode;  //返回節(jié)點(diǎn) }

        使用Java的Swing包里的方法能夠很容易地在JTree上做改動,可以使用彈出對話框的方法,也可以直接在JTree上改動??傊?,JTree改動后,需要重新寫回文件中去將一棵JTree寫成XML文件是一個遞歸的過程,方法如下:

        public void SaveToFile(DefaultMutableTreeNode, FileWriter fw)
            {try {
              if (root.isLeaf()) fw.write(root.toString()+“\r\n”); 
        //如果是葉子節(jié)點(diǎn)則直接將該節(jié)點(diǎn)輸出到文件中
             else { //不是葉子節(jié)點(diǎn)的話遞歸輸出該節(jié)點(diǎn)
              fw.write(“<”+root.toString()+“>\r\n”); 
             for (int i=0; i < root.getChildCount(); i++)
               { DefaultMutableTreeNode childNode =(DefaultMutableTreeNode) 
        root.getChildAt(i);
                 saveFile(childNode, fw); 
                 //遞歸輸出該節(jié)點(diǎn)的所有子節(jié)點(diǎn) }
           fw.write(“</”+root.toString()+“>\r\n”);
            }
              } catch (Exception e)
              {  e.printStackTrace();
              } }

        必須注意的是,如果XML文件中包含中文,那么需要在調(diào)用上面的函數(shù)之前,先在文件中輸入該XML文件的編碼方式,方法如下:

        fw.write(“<?xml version=“1.0” encoding=“GB2312”?>\r\n”);

        在調(diào)用該函數(shù)結(jié)束后,還應(yīng)該關(guān)閉該文件,方法是:

        fw.close()
        結(jié)論

        XML文件廣泛地運(yùn)用于配置文件、信息傳遞中。它的可視化方法有很多,本文通過結(jié)合Java的JTree類,介紹了其中一種實(shí)現(xiàn)方法。Java語言和XML的良好結(jié)合,讓使用Java編制XML程序既靈活又方便。

        以上就是XML文檔和JTree之間轉(zhuǎn)換方法的簡略介紹,詳細(xì)使用情況還需要大家自己使用過才領(lǐng)會。如果想了解更多,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

        網(wǎng)站題目:XML文檔和JTree之間轉(zhuǎn)換方法-創(chuàng)新互聯(lián)
        標(biāo)題URL:http://www.jbt999.com/article8/dsesip.html

        成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站App設(shè)計、網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站收錄、網(wǎng)站改版

        廣告

        聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

        網(wǎng)站優(yōu)化排名

      2. 
        

          <address id="upfr9"><pre id="upfr9"><strike id="upfr9"></strike></pre></address>
          1. <address id="upfr9"><tr id="upfr9"></tr></address><dl id="upfr9"></dl>
            99综合视频 | 中文黄色三级片 | 亚洲三级视频手机在线观看 | 国产精品高潮呻吟久久 | 麻豆三级片在线 | 亚洲精品乱码久久久久久9色 | 一本色道无码道DVD在线播放 | 五月丁香永久网站 | 女人久久久| 黄色片勉费视频网站 |