2013-02-27 5 views
1

Comment puis-je obtenir la chaîne de requête XPath correspondante à partir d'un TreePath sélectionné?javax.swing.tree.TreePath Sélection dans la chaîne de requête XPath

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

Si je sélectionne "d" Je veux obtenir quelque chose comme/a/b [2]/d

EDIT:. Pour l'instant, je voulais faire une boucle à travers le tree.getSelectionPath() toString() .split (",") mais l'information que vous obtiendrez est/a/b/d - vous ne pouvez pas comprendre que b devrait être b [2]

+1

[Qu'avez-vous essayé] (http://whathaveyoutried.com)? –

+0

@Eric Galluzzo: voir mon edit – KIC

Répondre

1

Enfin, je l'ai - peut-être que quelqu'un d'autre est intéressé dans une solution

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

Si vous utilisez le getIndex (TreeNode), vous n'avez pas besoin de faire une boucle sur tous les frères et sœurs encore et encore. rappelez-vous simplement que l'arborescence utilise l'indexation 0, vous devrez donc ajouter +1 pour obtenir l'index xpath.

De même que si (selected.getParent == null) n'est pas nécessaire et que seuls les serveurs à une exception NullPointerException potentielle si elle boucle à nouveau. Donc, vous pouvez commencer à réduire le code à ceci pour un extrait légèrement plus petit.

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(); 
    }