1/* 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26/* 27 * DOMUtils.java 28 * 29 * Created on May 7th 2002 30 */ 31 32package com.sun.tools.internal.xjc.util; 33 34import java.util.ArrayList; 35 36import javax.xml.namespace.QName; 37 38import org.w3c.dom.DOMException; 39import org.w3c.dom.Document; 40import org.w3c.dom.Element; 41import org.w3c.dom.Node; 42import org.w3c.dom.NodeList; 43 44 45/** 46 * 47 * @author Vivek Pandey 48 * @version 1.0 49 * 50 */ 51public class DOMUtils { 52 /** Gets the fist child of the given name, or null. */ 53 public static Element getFirstChildElement( Element parent, String nsUri, String localPart ) { 54 NodeList children = parent.getChildNodes(); 55 for( int i=0; i<children.getLength(); i++ ) { 56 Node item = children.item(i); 57 if(!(item instanceof Element )) continue; 58 59 if(nsUri.equals(item.getNamespaceURI()) 60 && localPart.equals(item.getLocalName()) ) 61 return (Element)item; 62 } 63 return null; 64 } 65 66 /** Gets the child elements of the given name. */ 67 public static Element[] getChildElements(Element parent, String nsUri, String localPart ) { 68 ArrayList a = new ArrayList(); 69 NodeList children = parent.getChildNodes(); 70 for( int i=0; i<children.getLength(); i++ ) { 71 Node item = children.item(i); 72 if(!(item instanceof Element )) continue; 73 74 if(nsUri.equals(item.getNamespaceURI()) 75 && localPart.equals(item.getLocalName()) ) 76 a.add(item); 77 } 78 return (Element[]) a.toArray(new Element[a.size()]); 79 } 80 81 /** Gets all the child elements. */ 82 public static Element[] getChildElements( Element parent ) { 83 ArrayList a = new ArrayList(); 84 NodeList children = parent.getChildNodes(); 85 for( int i=0; i<children.getLength(); i++ ) { 86 Node item = children.item(i); 87 if(!(item instanceof Element )) continue; 88 89 a.add(item); 90 } 91 return (Element[]) a.toArray(new Element[a.size()]); 92 } 93 94 95 public static String getElementText(Element element) throws DOMException{ 96 for (Node child = element.getFirstChild(); child != null; 97 child = child.getNextSibling()) { 98 if(child.getNodeType() == Node.TEXT_NODE) 99 return child.getNodeValue(); 100 } 101 return element.getNodeValue(); 102 } 103 104 public static Element getElement(Document parent, String name){ 105 NodeList children = parent.getElementsByTagName(name); 106 if(children.getLength() >= 1) 107 return (Element)children.item(0); 108 return null; 109 } 110 111 public static Element getElement(Document parent, QName qname){ 112 NodeList children = parent.getElementsByTagNameNS(qname.getNamespaceURI(), qname.getLocalPart()); 113 if(children.getLength() >= 1) 114 return (Element)children.item(0); 115 return null; 116 } 117 118 public static Element getElement(Document parent, String namespaceURI, 119 String localName) { 120 NodeList children = parent.getElementsByTagNameNS(namespaceURI, localName); 121 if(children.getLength() >= 1) 122 return (Element)children.item(0); 123 return null; 124 } 125 126 public static Element[] getElements(NodeList children) { 127 Element[] elements = null; 128 int len = 0; 129 for (int i = 0; i < children.getLength(); ++i) { 130 if (elements == null) 131 elements = new Element[1]; 132 if (elements.length == len) { 133 Element[] buf = new Element[elements.length + 1]; 134 System.arraycopy(elements, 0, buf, 0, elements.length); 135 elements = buf; 136 } 137 elements[len++] = (Element)children.item(i); 138 } 139 return elements; 140 } 141} 142