javax.swing.tree.TreePath选择到XPath查询字符串
如何从所选树路径获取相应的XPath查询字符串javax.swing.tree.TreePath选择到XPath查询字符串,java,swing,xpath,jtree,tree-nodes,Java,Swing,Xpath,Jtree,Tree Nodes,如何从所选树路径获取相应的XPath查询字符串 a |-b +-c |-b +-d 如果我选择“d”,我想得到类似/a/b[2]/d的东西 编辑: 现在我想在树中循环。getSelectionPath().toString().split(“,”),但您将获得的信息是/a/b/d-您无法确定b是否应该是b[2]最后我得到了它-也许其他人对解决方案感兴趣 DefaultMutableTreeNode selected = (DefaultMutableTreeNode) tree
a
|-b
+-c
|-b
+-d
如果我选择“d”,我想得到类似/a/b[2]/d的东西
编辑:
现在我想在树中循环。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);
我终于明白了——也许其他人对解决方案感兴趣
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索引
另外,if(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();
}
如果使用getIndex(TreeNode),则不必一次又一次地循环所有同级。请记住,树使用基于0的索引,因此必须添加+1才能获得xpath索引
另外,if(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();
}
?@Eric Galluzzo:看到我的编辑了吗?@Eric Galluzzo:看到我的编辑了吗