Java tutorial
//package com.java2s; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import org.w3c.dom.Element; import org.w3c.dom.Node; public class Main { /** * Finds the first (direct) child element with a given tag name and attribute. * * @param parent the parent element below which to search the child * @param tagName the (tag) name of the desired child element * @param attrName the name of the attribute which value must match the given value * @param value the attribute value to which elements are matched. * @return the child element if an element of that name existed, or null otherwise */ static public Element findFirstChildWithAttrib(Node parent, String tagName, String attrName, Object value) { Element elem = findFirstChild(parent, tagName); if (attrName == null) return null; while (elem != null) { // Check Value String attrValue = elem.getAttribute(attrName); if (attrValue == null || attrValue.length() < 1) { // Attribute is null if (value == null) break; // gefunden! } else { // Attribute is not null if (attrValue.equals(value.toString())) break; // gefunden! } // next elem = getNextSiblingElement(elem, true); } return elem; } /** * Finds the first (direct) child Element with a given tag name. * * @param parent the parent element below which to search the child * @param tagName the (tag) name of the desired child element * @return the child element if an element of that name existed, or null otherwise */ static public Element findFirstChild(Node parent, String tagName) { // Child Element suchen if (parent == null) return null; Node node = parent.getFirstChild(); while (node != null) { // Find all Element nodes if (node.getNodeType() == Node.ELEMENT_NODE) { // check name Element elem = (Element) node; if (tagName.equalsIgnoreCase(elem.getTagName())) return elem; // found } node = node.getNextSibling(); } return null; // not found! } /** * Returns the next sibling Element for an element, optionally matching tag names. * * @param child the element from which to search for a next sibling * @param sameName true to retrive the next sibling element of the same name, of false if any name is allowed * @return the next sibling element if one exists, or null otherwise */ static public Element getNextSiblingElement(Element child, boolean sameName) { // Child Element suchen if (child == null) return null; String name = child.getTagName(); Node node = child.getNextSibling(); while (node != null) { // Find all Element nodes if (node.getNodeType() == Node.ELEMENT_NODE) { // check name Element elem = (Element) node; if (sameName && name.equalsIgnoreCase(elem.getTagName())) return elem; // found } node = node.getNextSibling(); } return null; // not found! } /** * Gets the first (direct) child Element. * * @param parent the parent element below which to search the child * @return the first child element, or null otherwise */ static public Element getFirstChild(Node parent) { // Child Element suchen if (parent == null) return null; Node node = parent.getFirstChild(); while (node != null) { // Find all Element nodes if (node.getNodeType() == Node.ELEMENT_NODE) return (Element) node; // found node = node.getNextSibling(); } return null; // not found! } }