選択した 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 ベースのインデックスを使用するため、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();
}