目錄
XML文件的視覺化
一個讀寫XML檔的類別
結論
首頁 後端開發 XML/RSS教程 如何實現XML文件和JTree之間轉換

如何實現XML文件和JTree之間轉換

May 07, 2017 pm 02:08 PM

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之間轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

手機XML轉PDF,轉換速度快嗎? 手機XML轉PDF,轉換速度快嗎? Apr 02, 2025 pm 10:09 PM

手機XML轉PDF的速度取決於以下因素:XML結構的複雜性手機硬件配置轉換方法(庫、算法)代碼質量優化手段(選擇高效庫、優化算法、緩存數據、利用多線程)總體而言,沒有絕對的答案,需要根據具體情況進行優化。

怎麼在手機上把XML文件轉換為PDF? 怎麼在手機上把XML文件轉換為PDF? Apr 02, 2025 pm 10:12 PM

不可能直接在手機上用單一應用完成 XML 到 PDF 的轉換。需要使用雲端服務,通過兩步走的方式實現:1. 在雲端轉換 XML 為 PDF,2. 在手機端訪問或下載轉換後的 PDF 文件。

手機上如何將XML轉換成PDF? 手機上如何將XML轉換成PDF? Apr 02, 2025 pm 10:18 PM

直接在手機上將XML轉換為PDF並不容易,但可以藉助雲端服務實現。推薦使用輕量級手機App上傳XML文件並接收生成的PDF,配合雲端API進行轉換。雲端API使用無服務器計算服務,選擇合適的平台至關重要。處理XML解析和PDF生成時需要考慮複雜性、錯誤處理、安全性和優化策略。整個過程需要前端App與後端API協同工作,需要對多種技術有所了解。

web.xml怎麼打開 web.xml怎麼打開 Apr 03, 2025 am 06:51 AM

要打開 web.xml 文件,可以使用以下方法:使用文本編輯器(如記事本或 TextEdit)使用集成開發環境(如 Eclipse 或 NetBeans)使用命令行編輯命令(Windows:notepad web.xml;Mac/Linux:open -a TextEdit web.xml)

xml格式化工具推薦 xml格式化工具推薦 Apr 02, 2025 pm 09:03 PM

XML格式化工具可以將代碼按照規則排版,提高可讀性和理解性。選擇工具時,要注意自定義能力、對特殊情況的處理、性能和易用性。常用的工具類型包括在線工具、IDE插件和命令行工具。

有什麼手機APP可以將XML轉換成PDF? 有什麼手機APP可以將XML轉換成PDF? Apr 02, 2025 pm 08:54 PM

無法找到一款將 XML 直接轉換為 PDF 的應用程序,因為它們是兩種根本不同的格式。 XML 用於存儲數據,而 PDF 用於顯示文檔。要完成轉換,可以使用編程語言和庫,例如 Python 和 ReportLab,來解析 XML 數據並生成 PDF 文檔。

xml在線格式化 xml在線格式化 Apr 02, 2025 pm 10:06 PM

XML 在線格式化工具可自動將混亂的 XML 代碼整理成易於閱讀和維護的格式。通過解析 XML 的語法樹並應用格式化規則,這些工具優化了代碼的結構,增強了其可維護性和團隊協作效率。

xml怎麼導出pdf xml怎麼導出pdf Apr 03, 2025 am 06:45 AM

導出 XML 為 PDF 有兩種方法:使用 XSLT 和使用 XML 數據綁定庫。 XSLT:創建 XSLT 樣式表,指定 PDF 格式使用 XSLT 處理器轉換 XML 數據XML 數據綁定庫:導入 XML 數據綁定庫創建 PDF 文檔對象加載 XML 數據導出 PDF 文件哪種方法更好取決於需求。 XSLT 提供靈活性,而數據綁定庫實現簡單;對於簡單轉換,數據綁定庫更好,對於復雜轉換,XSLT 更合適。

See all articles