1 package org.softnetwork.xml.dom.xpath; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.w3c.dom.Element; 7 import org.w3c.dom.Node; 8 9 /** 10 * @author stephane.manciot@ebiznext.com 11 * 12 */ 13 public final class XPathNode extends XPathToken { 14 15 private XPathFilter[] filters; 16 17 XPathNode(String token, XPathFilter[] filters) throws XPathFormatException { 18 super(token); 19 this.filters = filters; 20 } 21 22 /** 23 * @return Renvoie filters. 24 */ 25 public XPathFilter[] getFilters() { 26 return filters; 27 } 28 29 public Element[] selectElements(Element current) 30 throws XPathFormatException { 31 Element[] elements = super.selectElements(current); 32 if (elements == null) 33 return EMPTY; 34 int len = elements.length; 35 if (elements.length <= 0) 36 return EMPTY; 37 List in = new ArrayList(); 38 int i = 0; 39 for (; i < len; i++) { 40 Element element = elements[i]; 41 boolean filtered = true; 42 if (filters != null) { 43 int j = 0; 44 int len2 = filters.length; 45 for (; j < len2; j++) { 46 XPathFilter filter = filters[j]; 47 filtered = filter.doFilter(element); 48 if (!filtered) 49 break; 50 } 51 } 52 if (filtered) 53 in.add(element); 54 } 55 return (Element[]) in.toArray(new Element[0]); 56 } 57 58 public Node[] selectNodes(Node current) throws XPathFormatException { 59 Node[] nodes = super.selectNodes(current); 60 if (nodes == null) 61 return EMPTY_NODES; 62 int len = nodes.length; 63 if (nodes.length <= 0) 64 return EMPTY_NODES; 65 List in = new ArrayList(); 66 int i = 0; 67 for (; i < len; i++) { 68 Node node = nodes[i]; 69 boolean filtered = true; 70 if (filters != null) { 71 int j = 0; 72 int len2 = filters.length; 73 for (; j < len2; j++) { 74 XPathFilter filter = filters[j]; 75 filtered = filter.filter(node); 76 if (!filtered) 77 break; 78 } 79 } 80 if (filtered) 81 in.add(node); 82 } 83 return (Node[]) in.toArray(new Node[0]); 84 } 85 86 }