Modified: ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java URL: http://svn.apache.org/viewvc/ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java?rev=635750&r1=635749&r2=635750&view=diff ============================================================================== --- ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java (original) +++ ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java Mon Mar 10 16:07:40 2008 @@ -26,6 +26,8 @@ import java.io.StringWriter; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import javax.xml.namespace.QName; @@ -335,26 +337,24 @@ HashMap<String,String> pref = new HashMap<String,String>(); Map<String,String> mine = getMyNamespaces(el); Node n = el.getParentNode(); - if (n != null) { - do { - if (n instanceof Element) { - Element l = (Element) n; - NamedNodeMap nnm = l.getAttributes(); - int len = nnm.getLength(); - for (int i = 0; i < len; ++i) { - Attr a = (Attr) nnm.item(i); - if (isNSAttribute(a)) { - String key = getNSPrefixFromNSAttr(a); - String uri = a.getValue(); - // prefer prefix bindings that are lower down in the tree. - if (pref.containsKey(key) || mine.containsKey(key)) continue; - pref.put(key, uri); - } - } - } - n = n.getParentNode(); - } while (n != null && n.getNodeType() != Node.DOCUMENT_NODE); - } + while (n != null && n.getNodeType() != Node.DOCUMENT_NODE) { + if (n instanceof Element) { + Element l = (Element) n; + NamedNodeMap nnm = l.getAttributes(); + int len = nnm.getLength(); + for (int i = 0; i < len; ++i) { + Attr a = (Attr) nnm.item(i); + if (isNSAttribute(a)) { + String key = getNSPrefixFromNSAttr(a); + String uri = a.getValue(); + // prefer prefix bindings that are lower down in the tree. + if (pref.containsKey(key) || mine.containsKey(key)) continue; + pref.put(key, uri); + } + } + } + n = n.getParentNode(); + } return pref; } @@ -1012,6 +1012,29 @@ LinkedList<Node> ll = new LinkedList<Node>(); for (int m = 0; m < cnl.getLength(); m++) ll.add(cnl.item(m)); return ll; + } + + public static List<Element> findChildrenByName(Element parent, QName name) { + if (parent == null) + throw new IllegalArgumentException("null parent"); + if (name == null) + throw new IllegalArgumentException("null name"); + + LinkedList<Element> ret = new LinkedList<Element>(); + NodeList nl = parent.getChildNodes(); + for (int i = 0; i < nl.getLength(); ++i) { + Node c = nl.item(i); + if(c.getNodeType() != Node.ELEMENT_NODE) + continue; + // For a reason that I can't fathom, when using in-mem DAO we actually get elements with + // no localname. + String nodeName = c.getLocalName() != null ? c.getLocalName() : c.getNodeName(); + if (new QName(c.getNamespaceURI(),nodeName).equals(name)) + ret.add((Element)c); + } + + + return ret; } }
