2011-08-11 3 views
1

"재분석"하고 싶은 복잡한 XML 트리가 있습니다. 내가 원하는 것은 주어진 속성을 가진 모든 객체를 얻는 것입니다 ("type"이라고합시다). 즉, type 속성을 가진 요소 만 트리 구조를 다시 만들고 싶다는 뜻입니다. 또한 (이것이 내가 XSLT를 사용할 수없는 이유입니다.) 새로 생성 된 객체 (요소가있는 요소)를 기본 XML 트리에서 Node (Element)에 대한 참조로 놓아야합니다.XML 트리 단순화 - 요소 간 관계 가져 오기

나는 compareDocumentPosition에게 방법을 확인하지만하지 트리 관계에 선 위치에서만 기지,

답변

1

이것은 재미있다! 아마도 특정 속성을 가진 모든 요소를 ​​XPath를 사용하여,

  1. 선택하고 변환 : 나는 문제를 정확하게 이해한다면, 당신은 만약 그렇다면, 당신이 이런 일을 할 수있을 것 같아요

     
            Root        Root 
           / \       / \ 
           N  T2   --->    T1  T2 
          / \ / \        /
          N T1 T3 N        T3 
    

    을 변환 할 그것은 부모가

  2. 반복 F 루트 또는 선택된 노드 중 하나가 될 때까지의 Set
  3. 제거하는 세트
  4. 에없는 모든 잎 노드는 최대 각 잎을 이동, 트리 bootom 업을 걸어 rom 2. 선택되지 않은 리프 노드가 없을 때까지
+0

2 단계에서 무슨 뜻인지 모르겠지만 전반적인 아이디어는 괜찮아 보입니다. 유일한 질문은 질문입니다 - XPath NodeSet 결과가 잘 정렬됩니까? 내 작업은 좀 더 복잡합니다. 실제로는 왼쪽의 노드에 대한 참조가있는 사용자 정의 객체를 사용하여 오른쪽에 표시 한 트리를 다시 만들어야합니다. 트리를 다시 만드는 것은 내 개체가 트리 항목 자체임을 의미합니다 (parentNode + childNodes). 따라서 XML 노드를 기반으로하는 사용자 지정 개체를 생성하려면 부모가 이미 존재하는지 확인해야합니다. –

+0

하지만 주어진 노드 (예 : 언급 한 집합에서 가져온)가 어떤 노드가 그의 실제 부모 (주어진 특성을 가진 첫 번째 부모)인지를 알려주는 XPath 쿼리가 있다면 모든 것이 더 간단해질 것입니다. 이 쿼리가 존재합니까? –

+0

흠, 예, 'ancestor :: * [@ type] [1]', 즉'type '속성을 가진'가장 가까운 '조상이됩니다 –

0

나는 당신이 어떤 제한이 있는지 확실하지 않습니다, 그러나 그것은 클래스 또는 여러 가지로 XML을 구문 분석 가치가있을 수 있습니다 클래스, 그런 다음 XML을 다시 작성 주어진 유형 == foo

+0

나는 전체 트리 파싱 (childList; DFS),하지만 그것은 세련된 XPath 표현을 선호하는 것이 가능할 경우 스타일링에 짜증이 난다. –

+0

attribute = "type"일 때 구문 분석 가능 [이 링크 시도하기] (http://www.mkyong.com/ java/how-to-read-xml-file-in-java-jdom-example /) 도움이 될지 확실하지 않은 경우 – Intern87