2013-02-27 72 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)? – 2013-02-27 13:15:05

+0

@Eric Galluzzo:看我的編輯 – KIC 2013-02-27 13:41:08

回答

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的索引,因此您必須添加+1才能獲取xpath索引。

此外,如果(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(); 
    }