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 }