DTM dtm = xctxt.getDTM(context);
if (null != dtm)
{
int predContext = xctxt.getCurrentNode();
DTMAxisTraverser traverser;
int axis = m_axis;
boolean needToTraverseAttrs = WalkerFactory.isDownwardAxisOfMany(axis);
boolean iterRootIsAttr = (dtm.getNodeType(xctxt.getIteratorRoot())
== DTM.ATTRIBUTE_NODE);
if((Axis.PRECEDING == axis) && iterRootIsAttr)
{
axis = Axis.PRECEDINGANDANCESTOR;
}
traverser = dtm.getAxisTraverser(axis);
for (int relative = traverser.first(context); DTM.NULL != relative;
relative = traverser.next(context, relative))
{
try
{
xctxt.pushCurrentNode(relative);
score = execute(xctxt);
if (score != NodeTest.SCORE_NONE)
{
//score = executePredicates( xctxt, prevStep, SCORE_OTHER,
// predContext, relative);
if (executePredicates(xctxt, dtm, context))
return score;
score = NodeTest.SCORE_NONE;
}
if(needToTraverseAttrs && iterRootIsAttr
&& (DTM.ELEMENT_NODE == dtm.getNodeType(relative)))
{
int xaxis = Axis.ATTRIBUTE;
for (int i = 0; i < 2; i++)
{
DTMAxisTraverser atraverser = dtm.getAxisTraverser(xaxis);
for (int arelative = atraverser.first(relative);
DTM.NULL != arelative;
arelative = atraverser.next(relative, arelative))
{
try
{
xctxt.pushCurrentNode(arelative);