Java XML Node Path getPath(Node n)

Here you can find the source of getPath(Node n)

Description

get Path

License

Open Source License

Declaration

public final static String getPath(Node n) 

Method Source Code

//package com.java2s;
/**//from w  w  w  . j  av  a  2s  . c o  m
 * 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);
    }
}

Related

  1. getNodes(Node node, String path)
  2. getNodesPathName(Node node)
  3. getNXInfo(Node xmlDoc, String NXclassPath, String NXclassNameList, String fieldName, String filename)
  4. getNXInfo1(Node xmlDoc, String NXclassPath, String NXclassNameList, String fieldName, String filename)
  5. getNXInfoDefault(Node xmlDoc, String NXclassPath, String NXclassNameList, String fieldName, String filename)
  6. getPath(Node node)
  7. getValueViaPath(Node node, String path)
  8. getValueViaPath(Node node, String path)
  9. getVectorPathFromNode(Node node)