목차
XML 문서 시각화
XML 파일을 읽고 쓰는 클래스
결론
백엔드 개발 XML/RSS 튜토리얼 XML 문서와 JTree 간 변환 방법

XML 문서와 JTree 간 변환 방법

May 07, 2017 pm 02:08 PM

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으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

XML 스키마 : PHP의 예제 XML 스키마 : PHP의 예제 Jul 23, 2025 am 12:27 AM

XMLSCHEMAVALIDATIONINPHPISACHIEVEDUSINGDOCUMENTANDOCUMENTANDANDOCUMENTANDANDOCUMENTANDANDOUCTCHASSESWITHTHELIBXMLEXTENSION.1) LOADTHEXMLFILEWITHDOMDOCUMUTE.2) audeChemaValidateTevalidateAgainStanStanStanSSDSCHA, THROSHINGENCECTIONIFVALIDATIONFAILS.3) FORLARGEFALES, XUSTANXCECTIONFVALIDATIONFAILS

개발자를위한 XML의 이점 : 단순성, 유연성 및 이식성 개발자를위한 XML의 이점 : 단순성, 유연성 및 이식성 Jul 20, 2025 am 03:59 AM

xmlbenefitsdevelopers와 함께 Simplicity, Flexibility 및 Portability.

외부 RSS 피드를 Shopify 매장에 통합하는 방법 외부 RSS 피드를 Shopify 매장에 통합하는 방법 Jul 24, 2025 am 02:13 AM

Tointegrateanexternalrssfeedintoshopify, FirstVerifyThefeed'SvalidityAndformatting.2.usecustomjavaScriptwithAproxyApilikerss2jsontofetChandDisplayTheFeEdinaliquidTemplate, asshopifyLackSnativesUpport.3. Alternative, Useano-codshopifypappsuchasblog 및

XML 네임 스페이스 : 웹 서비스를위한 모범 사례 XML 네임 스페이스 : 웹 서비스를위한 모범 사례 Jul 14, 2025 am 12:03 AM

theBestPracticesForUsingXMlNamesPacesInWebServicesERAE : 1) USEMEANGUNFULNAMESPACEURIS, 2) USESHORTANDDESCRICTIVEPREFIXES, 3) 지속적으로 APPLYNAMESPACES, 4) FEPOVERUSINGNAMESPACES, 5) DOCINGNAMESPACES 및 6) MUSEPORCICICATIONS.THESPRACTICESENSUR

잘 형성된 XML 작성 : 초보자를위한 단계별 안내서 잘 형성된 XML 작성 : 초보자를위한 단계별 안내서 Jul 13, 2025 am 12:23 AM

wellformedxmliscrucialforensuringDocumentsCanBeparsedBeparsedBeparsedBeparsedBeparsedBeparseD는 eScreateWell-formedXML : 1) useAsingLerooteLementAsSefoundation, 2) ensurealltagsareproperlyclosed, Incluessefforemperlymentions, 3) MASPORTYCASESCASESITIVENINE

XML 성능 : 좋은 결정입니까? XML 성능 : 좋은 결정입니까? Jul 15, 2025 am 01:07 AM

XML'SuitabilityFerperPerferferferferformance-CriticalApplicationSpecificNeds.1) XML'SparsingOverHeadCanBesignificant, 특히 ForlArgeFiles.2) Serialization 및 DeserializationINXMLARETIME-CONSUINING.3) XML'STVERBEDSTORGERFILES, 영향

XML : 잘 형성된 XML을 검증하지 않으면 어떻게해야합니까? XML : 잘 형성된 XML을 검증하지 않으면 어떻게해야합니까? Jul 21, 2025 am 02:28 AM

notvalidatingwell-formedxmlcanleadtoseriouseiSues.1) dataintegrityerrorsoccurwithoutvalidation.2) 상호 운용 조건부 arisariseassystemsmayinterpretxmldifferental.3) securityRiskSincressincrescsecresturecessincrescsincrisksincrisksincrisksincrisksincrisksincrisksincrisksincwayseScorwesscheSCONDASOSESCEMANDALOUSESCEDAN

XML 쓰기 규칙 : 일반적인 오류를 피하십시오 XML 쓰기 규칙 : 일반적인 오류를 피하십시오 Jul 21, 2025 am 01:50 AM

commentxmlerrorsincludematchedtags, 부적절한, unquotedattributevalues, assensitivitys, and misuseddeclarations.toavoid thease : 1) syntaxhighlightingandauto-completoprevedtags.2) mentallystructur

See all articles