public boolean matches(NodeInfo e, XPathContext context) throws XPathException {
if (e.getNodeKind() != Type.ELEMENT) {
return false;
}
DocumentInfo doc = e.getDocumentRoot();
if (doc==null) {
return false;
}
AtomicValue idValue = (AtomicValue)idExpression.evaluateItem(context);
if (idValue == null) {
return false;
}
String ids = idValue.getStringValue();
if (ids.indexOf(' ') < 0 &&
ids.indexOf(0x09) < 0 &&
ids.indexOf(0x0a) < 0 &&
ids.indexOf(0x0c) < 0) {
NodeInfo element = doc.selectID(ids);
if (element==null) return false;
return (element.isSameNodeInfo(e));
} else {
StringTokenizer tokenizer = new StringTokenizer(ids, " \t\n\r", false);
while (tokenizer.hasMoreElements()) {
String id = (String)tokenizer.nextElement();
NodeInfo element = doc.selectID(id);
if (element != null && e.isSameNodeInfo(element)) {
return true;
}
}
return false;