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 ベースのインデックスを使用するため、xpath インデックスを取得するには +1 を追加する必要があることに注意してください。

また、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 に答える