}
}
else if (key.charAt(0) == '@') {
if (node instanceof Element) {
String attValue = ((Element) node).getAttribute(key.substring(1));
result = new SimpleScalar(attValue);
}
else {
throw new TemplateModelException("Trying to get an attribute value for a non-element node");
}
}
else if ("is_element".equals(key)) {
result = (node instanceof Element) ?
TemplateBooleanModel.TRUE : TemplateBooleanModel.FALSE;
}
else if ("is_text".equals(key)) {
result = (node instanceof Text) ?
TemplateBooleanModel.TRUE : TemplateBooleanModel.FALSE;
}
else if ("name".equals(key)) {
result = new SimpleScalar(node.getNodeName());
}
else if ("children".equals(key)) {
result = new NodeListTM(node.getChildNodes());
}
else if ("parent".equals(key)) {
Node parent = node.getParentNode();
result = (parent == null) ? null : new DOMNodeModel(parent);
}
else if ("ancestorByName".equals(key)) {
result = new AncestorByName();
}
else if ("nextSibling".equals(key)) {
Node next = node.getNextSibling();
result = (next == null) ? null : new DOMNodeModel(next);
}
else if ("previousSibling".equals(key)) {
Node previous = node.getPreviousSibling();
result = (previous == null) ? null : new DOMNodeModel(previous);
}
else if ("nextSiblingElement".equals(key)) {
Node next = nextSiblingElement(node);
result = (next == null) ? null : new DOMNodeModel(next);
}
else if ("previousSiblingElement".equals(key)) {
Node previous = previousSiblingElement(node);
result = (previous == null) ? null : new DOMNodeModel(previous);
}
else if ("nextElement".equals(key)) {
Node next = nextElement(node);
result = (next == null) ? null : new DOMNodeModel(next);
}
else if ("previousElement".equals(key)) {
Node previous = previousElement(node);
result = (previous == null) ? null : new DOMNodeModel(previous);
}
else if ("text".equals(key)) {
result = new SimpleScalar(getText(node));
}
cache.put(key, result);
}
return result;
}