Java tutorial
//package com.java2s; /** * The contents of this file are subject to the Regenstrief Public License * Version 1.0 (the "License"); you may not use this file except in compliance with the License. * Please contact Regenstrief Institute if you would like to obtain a copy of the license. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) Regenstrief Institute. All Rights Reserved. */ import org.w3c.dom.*; public class Main { public final static String getPath(Node n) { String path = ""; while (n != null) { path = "/" + getPathElement(n) + path; n = getParent(n); } return path; } private final static String getPathElement(final Node n) { final String name = getLocalName(n); int i = 1; if (n instanceof Attr) { return "@" + name; // Still need to check namespaces; could have 2 with same local name } // Could use attributes/namespaces to distinguish between nodes with the same local name // instead of just an index Node sib = n; while ((sib = sib.getPreviousSibling()) != null) { if (name.equals(getLocalName(sib))) { i++; } } if (i > 1) { return name + "[" + i + "]"; } sib = n; while ((sib = sib.getNextSibling()) != null) { if (name.equals(getLocalName(sib))) { return name + "[1]"; } } return name; } private final static Node getParent(final Node n) { return n instanceof Attr ? ((Attr) n).getOwnerElement() : n.getParentNode(); } /** * Retrieves the local name of the given Node * * @param n the Node * @return the local name String **/ public final static String getLocalName(final Node n) { if (n == null) { return null; } final String name = n.getLocalName(); return name == null ? getLocalName(n.getNodeName()) : name; } /** * Retrieves the local name from the given qualified name * * @param s the qualified name * @return the local name **/ public final static String getLocalName(final String s) { if (s == null) { return null; } final int i = s.indexOf(':'); return i < 0 ? s : s.substring(i + 1); } }