2009-04-05 2 views
0

문제 : 의 데이터 및 응용 프로그램에 대한 관심의 특정 요소의 계층 구조를 모두 포함하는 XML 파일이 있다고 가정 해 봅시다 :계층 구조 및 데이터 구조 자바 (또는 XML 변환 객체에 : 모범 사례를)

<root> 
    <node title="lvl1Node"> 
     <node title="lvl2Node"> 
      <node title="lvl3Node"></node> 
     </node> 
    </node> 
    <node title="lvl1Node2"></node> 
    <node title="lvl1Node3"> 
     <node title="lvl2Node2"> 
      <node title="lvl3Node2"> 
       <node title="lvl4Node"></node> 
      </node> 
     </node> 
    </node> 
    </root> 

이제 애플리케이션이 이러한 노드를 검색하기 위해 API를 제공해야한다고 가정 해 보겠습니다. 계층에 대한 정보를 잃지 않고 노드를 반환하는 메서드를 작성해야합니다.

제 질문은 어떻게 생각하세요? 어떤 종류의 데이터 유형을 사용할 것입니까? 트리 데이터 유형은 분명한 해답이지만 표준 Collections API에서는 제공되지 않으며 직접 작성하는 것이 항상 최후의 수단입니다 (프로그래머는 게으르다, 바퀴를 다시 만드는 등).

또한 각 항목이 Object (하위 노드가없는 노드의 경우) 또는 Arraylist (하위 노드가있는 노드의 경우) 중 하나 인 ArrayList를 생각했지만 제네릭을 좋아하고 이것은 해킹처럼 느껴집니다. 더 똑똑한 방법이 있습니까?

답변

1

먼저 데이터에 액세스해야하는 첫 번째 질문은 무엇입니까? 깊이 우선 반복? 특정 값을 찾으십니까?

언뜻보기에 이것은 각 노드가 0 개 이상의 자식을 가질 수있는 노드 트리입니다.

는 그래서 이런 식입니다 :

class Node { 
    Node parent; 
    List<Node> children; 
} 

그것은 연결리스트처럼,하지만 각 노드가 아이의 임의의 숫자로 밖으로 분기 할 수 있습니다. ID로 항목을 직접 찾아야하는 경우 가장 좋은 방법은 별도의 해시 맵 인덱스를 유지하는 것입니다.

+0

... 의심스럽게 DOM과 비슷하게 보입니다. –

+0

DOM이 정확히 무엇을 의미하는지 모르겠지만 때로는 문서를 한 곳에서 파싱하고 데이터를 추출하여 코드의 다른 곳에서 사용할 수 있도록해야합니다. 이것은 실제로 구조를 시뮬레이션하고 데이터를 저장하기 때문에 최상의 솔루션입니다. – javito

+0

그런 식으로 XML에 액세스하기위한 API가 이미 있다는 것을 의미하며 문서 객체 모델이라고합니다. http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JAXPDOM.html –

0

각 항목에 제목이있는 경우 목록 대신지도를 사용할 수 있습니다. 각 항목을보다 직관적으로 액세스 할 수있게합니다 (색인 대신 노드 이름 사용).

+0

지도를 사용하는 경우 어떤 노드가 하위 노드이고 그 부모가 누구인지 어떻게 알 수 있습니까? 계층 구조에 대한 정보를 잃어 버리고 고유 한 이름 (제목)에 대해 걱정해야합니다. – javito

+0

지도를지도에 배치하여 계층 구조를 유지 관리 할 수 ​​있습니다. – CookieOfFortune

0

트리 구조가 필요한 마지막 시간 -을 사기로 사용했습니다. 그것의 꽤 (스윙을 당기는 것을 포함한다) 그러나 그것은 정말로 잘 작동한다! 컬렉션 API에 넣지 않은 것이 수치 스럽습니다.

1

Err. DOM에서 다루지 않는 것은 정확히 무엇입니까?