2014-09-30 5 views
0

구문 분석이 필요한 많은 수의 XML 파일이 있고 트리 구조를 생성하고 데이터를 데이터베이스로 옮기기 위해 추가로 읽습니다. 다음은 필자의 요구 사항을 만족시키는 구조이다. TreeNode를 클래스는 태그 이름, 속성과 그 부모 태그 (여기에 태그 XML 요소입니다)XML 사용자 정의 요소가있는 Java 구문 분석

public class TreeNode { 

    String tagname; 
    Map<String, String> tagmap; 
    TreeNode parent; 
    List<TreeNode> children; 

    public TreeNode(String tagname, Map<String, String> tagmap) { 

     this.tagname = tagname; 
     this.tagmap = tagmap; 
     this.children = new LinkedList<TreeNode>(); 
    } 


    public TreeNode addChild(String tagname,Map<String, String> tagmap) { 
     TreeNode childNode = new TreeNode(tagname,tagmap); 
     childNode.parent = this; 
     this.children.add(childNode); 
     return childNode; 
    } 

지금은 어려운 XML 파일을 구문 분석 찾는하고있을 것이다. 샘플 XML 파일은 다음과 같습니다

<head> 
    <link href="files/style.css" rel="stylesheet"/> 
</head> 
<div class="toolbar" style="display:block;position:absolute;top:0;left:0;width:100%;height:100%"> 
    <TABLE datatable="0" summary="">     
     <prj:if condition="Platform"> 
      <tr> 
       <td nowrap><prj:toolbar name="First RunningTest"><prj:running property="HTML"/></prj:toolbar></td>  
       <td>&nbsp;</td> 
     </tr> 

     <tr>  
       <td nowrap><prj:toolbar name="Second RunningTest"><prj:running property="HTML"/></prj:toolbar>  
       <td>&nbsp;</td> 
     </tr> 

     <tr> 
       <td nowrap><prj:toolbar name="Third RunningTest"><prj:running property="HTML"/></prj:toolbar>  
       <td>&nbsp;</td> 
     </tr> 
     </prj:if> 

     </TABLE> 
</div> 

prj 태그는 프로젝트마다 고유합니다.

그래서 트리 구조는

root  
--head (its map will be empty)  
    --link (its map will all its properties i.e. key,value pair) 

--div  
    --table 
     --prj_if 
     --tr  
      --td  
       --prj_toolbar 
        --prj_running 
      --td 
     --tr  
      --td 
       --prj_toolbar  
        --prj_running 
      --td 
     --tr  
      --td  
       --prj_toolbar 
        --prj_running 
      --td 

XML은 (HTML 태그에서 떨어져 더 PRJ 태그의 수백이있을 수 있습니다) 모든 요소를 ​​포함 할 수있을 것이다. 그래서 모든 태그, 그것의 프로 프/값 쌍 및 그 자식 노드 세부 정보를 저장해야합니다. 어떻게 XML을 읽고 Treemap으로 옮깁니 까? 또한 트리 맵을 트래버스하여 맵을 읽는 방법과 데이터를 매핑하는 하위 요소를 채우는 방법도 있습니다.
XML 구문 분석에 도움주세요

+0

XML을 구문 분석하기 위해 어떤 인프라를 사용하고 있습니까? JAXB를 들여다 보았습니까? –

+0

@ Ryan J, 저는 JAXB에서 일하지 않았습니다. 내가 읽었을 때 Unmarshalling의 모든 기본 예제에서 first class가 정의 된 다음 JAXB를 사용하여 xml 내용이 클래스로 파싱됩니다. 필자의 경우 모든 XML 파일에는 다른 요소가 있으므로 어떤 XML 파일에 어떤 태그가 올지 보장 할 수 없습니다. 또한 계층 트리 구조를 갖는 방법. 내 요구 사항을 기반으로 몇 가지 예를 보여 주거나 앞으로 가져갈 기본 구조를 세울 수 있습니까? 귀하의 도움에 미리 감사드립니다. – user2223335

+0

여기에 꽤 광범위한 질문이 있으니 확실한 답을 내리기는 힘들지 만,보아야 할 것은 모든 하위 태그가 상속 받게 될'List'와 추상 기본 유형을 취소하는 것입니다 에서. XML은 특정 루트 태그 아래에서 태그가 다르게 허용되는 설명대로 구조를 허용하는 일부 스키마를 준수해야하므로 클래스를 적절히 구성 할 수 있습니다. 그렇지 않으면 각 조합에 대해 별도의 클래스 구조가 필요합니다. –

답변

0

DOM, JDOM2 및 XOM과 같은 XML의 트리 기반 모델은 정확히 무엇을 설명합니다. 여기에는 XML을 구문 분석하고 설명하는 것과 같은 트리를 제공하는 빌더 프로그램이 모두 포함되어 있습니다.

관련 문제