如何從選定的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]
如何從選定的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]
最後我明白了 - 也許別人有興趣在解決方案中
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);
如果使用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();
}
[你有什麼試過](http://whathaveyoutried.com)? – 2013-02-27 13:15:05
@Eric Galluzzo:看我的編輯 – KIC 2013-02-27 13:41:08