Given a parent element, locate double value of a child XML node. - Java XML

Java examples for XML:XML Element Child

Description

Given a parent element, locate double value of a child XML node.

Demo Code

/*******************************************************************************
     * Copyright (c) 2015-2016 Oak Ridge National Laboratory.
     * All rights reserved. This program and the accompanying materials
     * are made available under the terms of the Eclipse Public License v1.0
     * which accompanies this distribution, and is available at
     * http://www.eclipse.org/legal/epl-v10.html
     *******************************************************************************/
//package com.java2s;

import java.util.Optional;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

public class Main {
    /** Given a parent element, locate double value of a child node.
     *  @param parent Parent element//w w  w . jav  a 2  s . c  om
     *  @param name Name of child element
     *  @return Value of child element, or empty result
     *  @throws Exception on error parsing the number
     */
    public static Optional<Double> getChildDouble(final Element parent,
            final String name) throws Exception {
        final Element child = getChildElement(parent, name);
        if (child == null)
            return Optional.empty();
        try {
            return Optional.of(Double.valueOf(getString(child)));
        } catch (NumberFormatException ex) {
            throw new Exception("Expected double for <" + name + ">", ex);
        }
    }

    /** Look for child node of given name.
     *
     *  @param parent Node where to start.
     *  @param name Name of the node to look for.
     *  @return Returns Element or <code>null</code>.
     */
    public static final Element getChildElement(final Node parent,
            final String name) {
        return findElementByName(parent.getFirstChild(), name);
    }

    /** Get string value of an element.
     *  @param element Element
     *  @return String of the node. Empty string if nothing found.
     */
    public static String getString(final Element element) {
        final Node text = element.getFirstChild();
        if (text == null) // <empty /> node
            return "";
        if ((text.getNodeType() == Node.TEXT_NODE || text.getNodeType() == Node.CDATA_SECTION_NODE))
            return text.getNodeValue();
        return "";
    }

    /** Look for Element node of given name.
     *
     *  <p>Checks the node itself and its siblings for an {@link Element}.
     *  Does not descent down the 'child' links.
     *
     *  @param node Node where to start.
     *  @param name Name of the node to look for.
     *  @return Returns node, the next matching sibling, or <code>null</code>.
     */
    private static final Element findElementByName(Node node,
            final String name) {
        while (node != null) {
            if (node.getNodeType() == Node.ELEMENT_NODE
                    && node.getNodeName().equals(name))
                return (Element) node;
            node = node.getNextSibling();
        }
        return null;
    }
}

Related Tutorials