View Javadoc

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  }