Hi,
I am developing an incremental(not in meaning as is Xalan) XSLT
processor called
Darwin(http://tstudva.googlepages.com/darwin-anincrementalxsltprocessor),
based on Xalan trunk.
I have some questions about Xalan implementation details. As I
understand every template element has execute method, which is called to
execute template element including children (direct). But sometimes
there is a difference.
1,
In ElemApplyTemplates when matching node against template there is code
case DTM.TEXT_NODE:
// if(rth.m_elemIsPending ||
// rth.m_docPending)
// rth.flushPending(true);
transformer
.pushPairCurrentMatched(
sroot
.getDefaultTextRule(),
child);
transformer
.setCurrentElement(sroot
.getDefaultTextRule());
//
dtm.dispatchCharactersEvents(child,
// chandler,
false);
dtm.dispatchCharactersEvents(
child, rth,
false);
transformer.popCurrentMatched();
continue;
There is some default template, sroot.getDefaultTextRule(), but it is
not executed and instead direct call to
dtm.dispatchCharactersEvents(child, rth,false); is performed.
Why?(optimization?)
2, In ElemApplyTemplates after template is found, is set on stacks and
so on and params are processed, follows code with comment
// And execute the child templates.
// Loop through the children of the template,
// calling execute on
// each of them.
for (ElemTemplateElement t = template.m_firstChild; t != null; t =
t.m_nextSibling) {
xctxt.setSAXLocator(t);
try {
transformer
.pushElemTemplateElement(t);
t.execute(transformer,
null);
} finally {
transformer
.popElemTemplateElement();
}
}
which directly executes children of matched template insted of executing
template. Why?
Thanks for help, Xalan fan :) Tomas Studva
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]