亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

XML文檔和JTree之間轉換方法

發布時間:2020-05-07 13:40:52 來源:億速云 閱讀:753 作者:Leah 欄目:編程語言

今天小編為大家帶來一篇XML文檔和JTree之間轉換方法的文章。小編覺得挺不錯的,為此分享給大家做個參考。一起跟隨小編過來看看吧。

XML因為良好的結構,被廣泛地應用于文檔格式的定義。我們知道,應用軟件一般需要用配置文件來決定運行時的一些參數。以前的應用程序的配置文件一般是一個.ini文件。雖然現在,ini文件仍然在使用,但是由于XML的出現,越來越多的商用軟件正在把XML當作配置文件的格式,如BEA的Weblogic,以及IBM的Websphere等。所以,當我們設計一個軟件的配置文件時,將會越來越多地考慮使用XML作為該配置文件的格式。

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

XML文檔的可視化

一個XML文檔其實是一個樹形的結構。比如下面這個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>現代</name>
    <dir>d:\software\App\skin</dir>
    <head>head2.bmp</head>
    <center>center2.bmp</center>
    <foot>foot2.bmp</foot>
  </skin2>
</skin>

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

XML文檔和JTree之間轉換方法

圖 可視化結果

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

一個讀寫XML文件的類

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

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

其中構造函數所做的初始化工作如下:

XMLTree(String fileName){
      dbf = DocumentBuilderFactory.newInstance(); 
      //生成dbf的實例
      db = dbf.newDocumentBuilder();  
      //生成db的實例
      treeNode = LoadFile( getXMLRoot( text ) );  
      //解析該xml文件,返回JTree的根節點
      setModel( new DefaultTreeModel( treeNode ) );  
      //根據該根節點生成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; 
         //定義要返回的根節點
      String name = root.getNodeName();
         //獲得該節點的NodeName
         String value = root.getNodeValue(); 
         //獲得該節點的NodeValue
     treeNode = new DefaultMutableTreeNode( root.
getNodeType() == Node.TEXT_NODE ? value : name );
      //如果為值節點,那么取得該節點的值,否則取得該節點的Tag的名字 
      if ( root.hasChildNodes() ) 
      //如果該節點有孩子節點,那么遞歸處理該節點的孩子節點
      {  NodeList children = root.getChildNodes();  
        //取得該節點的子節點列表
         if( children != null ){       
         //判斷子節點是否為空
          int numChildren = children.getLength();  
           //取得字節數目
            for (int i=0; i < numChildren; i++){  
               Node node = children.item(i); 
                  //循環處理每個子節點
               if( node != null )
               {  if( node.getNodeType() == Node.ELEMENT_NODE )
                  { treeNode.add( createTreeNode(node) ); 
                  //如果該子節點還有孩子節點使用遞歸的方法處理該子節點
                  } 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()));
                       //如果該節點沒有孩子節點,那么直接加到節點下
                       }   
                   }  
                 } 
               } 
            }
         }
      } 
      return treeNode;  //返回節點 }

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

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

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

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

在調用該函數結束后,還應該關閉該文件,方法是:

fw.close()

結論

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

以上就是XML文檔和JTree之間轉換方法的簡略介紹,詳細使用情況還需要大家自己使用過才領會。如果想了解更多,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临武县| 疏附县| 海安县| 柳河县| 高密市| 广元市| 松江区| 陇西县| 巴彦淖尔市| 大厂| 鄂托克前旗| 曲周县| 岳阳县| 台南市| 平阴县| 洱源县| 澎湖县| 吉木乃县| 泉州市| 且末县| 锦州市| 南投市| 手游| 喀什市| 罗甸县| 祁门县| 常州市| 中西区| 山丹县| 同德县| 四会市| 周宁县| 砚山县| 锦州市| 德保县| 吕梁市| 青神县| SHOW| 晋江市| 自贡市| 白玉县|