>  기사  >  백엔드 개발  >  XML 문서와 JTree 간 변환 방법

XML 문서와 JTree 간 변환 방법

黄舟
黄舟원래의
2017-05-07 14:08:542102검색

XML은 구조가 좋기 때문에 문서 형식 정의에 널리 사용됩니다. 우리는 일반적으로 애플리케이션 소프트웨어가 런타임 중에 일부 매개변수를 결정하기 위해 구성 파일을 사용해야 한다는 것을 알고 있습니다. 이전 애플리케이션의 구성 파일은 일반적으로 .ini 파일이었습니다. ini 파일은 오늘날에도 여전히 사용되고 있지만 XML의 출현으로 인해 BEA의 Weblogic 및 IBM의 Websphere와 같은 점점 더 많은 상용 소프트웨어가 XML을 구성 파일 형식으로 사용하고 있습니다. 따라서 소프트웨어 구성 파일을 디자인할 때 구성 파일의 형식으로 XML을 사용하는 것을 점점 더 고려할 것입니다.

구성 파일은 때때로 사용자가 수정해야 하기 때문에 구성 파일 편집을 위한 시각적 형식을 제공하는 것은 소프트웨어의 우수한 사용자 상호 작용을 반영합니다. 우리는 XML 문서에 대한 시각적 방법을 찾아야 합니다. Java 언어의 Swing 구성 요소에 있는 JTree는 XML 문서 시각화에 매우 적합합니다. 둘 사이에는 매우 편리한 변환 방법이 있습니다. 즉, 저장 후 XML 파일의 수정 사항으로 JTree에서 사용자 작업을 쉽게 표시할 수 있고, 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 문서가 다중 인터페이스 프로그램 picture 구성 프로그램의 인터페이스임을 알 수 있습니다. JTree를 사용해야 합니다. 얻어지는 것은 아래 그림과 같은 결과입니다.

XML 문서와 JTree 간 변환 방법

그림 시각화 결과

모든 XML 문서는 이러한 Jtree를 생성할 수 있습니다. XML의 Parser와 Java의 JTree 클래스를 사용하면 일반적인 시각적 XML 문서를 구성하여 JTree를 구성할 수 있습니다. XML Parser로 XML 문서를 파싱한 결과 DOM(Document Object Model) 트리가 생성됩니다. 실제로 DOM 트리의 구조는 다음과 같습니다. JTree와 XML Parser 간의 협력을 매우 자연스럽게 만드는 JTree의 구조입니다. 방법은 다음과 같습니다.

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”);

함수를 호출한 후 다음과 같이 파일도 닫아야 합니다.

rree

결론

XML 파일은 구성 파일 및 정보 전송에 널리 사용됩니다. 시각화 방법에는 여러 가지가 있다. 본 글에서는 Java의 JTree 클래스를 결합하여 구현하는 방법 중 하나를 소개한다. Java 언어와 XML의 좋은 조합으로 인해 Java를 사용하여 XML 프로그램을 컴파일하는 것이 유연하고 편리해졌습니다.

위 내용은 XML 문서와 JTree 간 변환 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.