Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//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);
    }
}