如何从选定的 TreePath 中获取相应的 XPath 查询字符串?
a
|-b
+-c
|-b
+-d
如果我选择“d”,我想得到类似 /a/b[2]/d
编辑:现在我想循环遍历 tree.getSelectionPath().toString().split(",") 但你会得到的信息是 /a/b/d - 你不知道 b 应该是 b [2]
如何从选定的 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 索引。
此外,不需要 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();
}