2013-02-27 6 views
1

선택한 TreePath에서 해당 XPath 쿼리 문자열을 가져 오는 방법은 무엇입니까? javax.swing.tree.TreePath XPath 쿼리 문자열 선택

a 
|-b 
    +-c 
|-b 
    +-d 

내가 선택하는 경우

는 "D는"나는/A/B [2]/D 같은 것을하고 싶지 편집

:. 나는 tree.getSelectionPath()를 통해 루프를 원하는 지금은 toString를() .split (",")하지만 얻을 수있는 정보는/a/b/d입니다. b는 b가되어야 함을 알 수 없습니다. [2]

+1

[무엇을 시도해 봤습니까?] (http://whathaveyoutried.com)? –

+0

@Eric Galluzzo : 내 편집 참조 – KIC

답변

1

마지막으로 알았습니다. 솔루션 내에서

DefaultMutableTreeNode selected = (DefaultMutableTreeNode) tree.getSelectionPath().getLastPathComponent(); 

    String xpath = ""; 
    while (selected.getParent() != null) { 
     int index = 1; 
     String tag = selected.toString(); 
     DefaultMutableTreeNode selected2 = selected; 
     while ((selected2 = selected2.getPreviousSibling()) != null) { 
      if (tag.equals(selected2.toString())) index++; 
     } 

     xpath = "/" + tag + "[" + index + "]" + xpath; 
     if (selected.getParent() == null) { 
      selected = null; 
     } else { 
      selected = (DefaultMutableTreeNode) selected.getParent(); 
     } 
    } 

    LOG.info(xpath); 
0

getIndex (TreeNode)를 사용하면 모든 형제를 반복해서 반복 할 필요가 없습니다. 트리는 0 기반 인덱스를 사용하므로 xpath 인덱스를 얻으려면 +1을 추가해야한다는 것을 기억하십시오.

또한 (selected.getParent == null)이 필요하지 않으며 서버가 다시 루프하는 경우 잠재적 인 NullPointerException에 대해서만 예외가 발생합니다. 코드 축소를 조금 더 작은 조각으로 줄이면됩니다.

String xpath = ""; 
    while (selected.getParent() != null) {      
     TreeNode parent = selected.getParent(); 

     int index = parent.getIndex(selected) + 1; 

     xpath = "/" + selected.toString() + "[" + index + "]" + xpath; 

     selected = (DefaultMutableTreeNode) selected.getParent(); 
    }