code: @Override
      public Set<Node> check(Set<Node> nodes, Node root) throws NodeSelectorException {
          Assert.notNull(nodes, "nodes is null!");
          Set<Node> result = new LinkedHashSet<Node>();
          for (Node node : nodes) {
          	if(node instanceof NestableAttributeHolderNode) {
  	        	
  	        	Map<String,Attribute> map = ((NestableAttributeHolderNode) node).getAttributeMap();
  	            if (map == null || map.isEmpty()) {
  	                continue;
  	            }
  	            
  	            Attribute attr = map.get(specifier.getName());
  	            if (attr == null) {
  	                continue;
  	            }
  	            
  	            // It just have to be present.
  	            if (specifier.getValue() == null) {
  	                result.add(node);
  	                continue;
  	            }
  	            
  	            String value = attr.getValue().trim();
  	            if (value.length() != 0) {
  	                String val = specifier.getValue();
  	                switch (specifier.getMatch()) {
  	                case EXACT:
  	                    if (value.equals(val)) {
  	                        result.add(node);
  	                    }
  	                    
  	                    break;
  	                case HYPHEN:
  	                    if (value.equals(val) || value.startsWith(val + '-')) {
  	                        result.add(node);
  	                    }
  	                    
  	                    break;
  	                case PREFIX:
  	                    if (value.startsWith(val)) {
  	                        result.add(node);
  	                    }
  	                    
  	                    break;
  	                case SUFFIX:
  	                    if (value.endsWith(val)) {
  	                        result.add(node);
  	                    }
  	                    
  	                    break;
  	                case CONTAINS:
  	                    if (value.contains(val)) {
  	                        result.add(node);
  	                    }
  	                    
  	                    break;
  	                case LIST:
  	                    for (String v : value.split("\\s+")) {
  	                        if (v.equals(val)) {
  	                            result.add(node);
  	                        }
  	                    }
  	                    
  	                    break;
  	                }
  	            }
          	}
          }
          
          return result;
      }
docs: {@inheritDoc}