1

如何从选定的 TreePath 中获取相应的 XPath 查询字符串?

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

如果我选择“d”,我想得到类似 /a/b[2]/d

编辑:现在我想循环遍历 tree.getSelectionPath().toString().split(",") 但你会得到的信息是 /a/b/d - 你不知道 b 应该是 b [2]

4

2 回答 2

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);
于 2013-02-28T12:49:18.743 回答
0

如果您使用 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();
    }
于 2013-02-28T14:02:34.270 回答