1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
package com.jclark.xsl.tr;
import com.jclark.xsl.om.*;
import com.jclark.xsl.expr.StringExpr;
class AttributeAction implements Action {
private StringExpr nameExpr;
private StringExpr namespaceExpr;
private NamespacePrefixMap nsMap;
private Action content;
AttributeAction(StringExpr nameExpr, StringExpr namespaceExpr,
NamespacePrefixMap nsMap, Action content) {
this.nameExpr = nameExpr;
this.namespaceExpr = namespaceExpr;
this.nsMap = nsMap;
this.content = content;
}
public void invoke(ProcessContext context, Node sourceNode, Result result) throws XSLException {
String qname = nameExpr.eval(sourceNode, context);
Name name;
if (namespaceExpr != null) {
String ns = namespaceExpr.eval(sourceNode, context);
if (ns.length() == 0)
name = nsMap.getNameTable().createName(qname.substring(qname.indexOf(';') + 1));
else
name = nsMap.getNameTable().createName(qname, ns);
}
else
name = nsMap.expandAttributeName(qname, sourceNode);
StringResult s = new StringResult(result);
content.invoke(context, sourceNode, s);
result.attribute(name, s.toString());
}
}
|