Try adding this code inside the loop at the top;
Node singleNode = nodes.item(i);
singleNode.getParentNode().removeChild(singleNode);
then run each evaluation using the singleNode
variable instead of nodes.item(i);
(of course you change the name)
Doing this detaches the node you are working with from the large main document. This will speed up the evaluate methods processing time by a huge amount.
EX:
for(int i=0;i<nodes.getLength();i++)
{
Node singleNode = nodes.item(i);
singleNode.getParentNode().removeChild(singleNode);
printTimestamp(1);
xp.evaluate("atom:id/text()", singleNode );
printTimestamp(2);
xp.evaluate("samplens:fieldA/text()", singleNode );
printTimestamp(3);
xp.evaluate("atom:author/atom:uri/text()", singleNode );
printTimestamp(4);
xp.evaluate("samplens:fieldA/samplens:fieldB/&at;attrC", singleNode );
printTimestamp(5);
//etc. My real example has 10 of these xp.evaluate lines
}