Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.swing.tree.TreePath选择到XPath查询字符串_Java_Swing_Xpath_Jtree_Tree Nodes - Fatal编程技术网

javax.swing.tree.TreePath选择到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

如何从所选树路径获取相应的XPath查询字符串

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:看到我的编辑了吗