mmidy 00/10/05 15:58:25
Modified: java/src/org/apache/xalan/transformer NodeSorter.java
Log:
Make sure nextNode is only called once in sort processing
Revision Changes Path
1.4 +13 -6
xml-xalan/java/src/org/apache/xalan/transformer/NodeSorter.java
Index: NodeSorter.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/NodeSorter.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- NodeSorter.java 2000/08/17 21:00:01 1.3
+++ NodeSorter.java 2000/10/05 22:58:25 1.4
@@ -60,6 +60,8 @@
import java.text.NumberFormat;
import java.text.CollationKey;
import org.w3c.dom.Node;
+import org.w3c.dom.traversal.NodeIterator;
+import org.apache.xpath.axes.ContextNodeList;
import org.apache.xpath.XPathContext;
import org.apache.xpath.NodeSet;
import org.apache.xpath.objects.XObject;
@@ -419,12 +421,7 @@
NodeSortKey k1 = (NodeSortKey)m_keys.elementAt(0);
XObject r = k1.m_selectPat.execute(m_execContext, node,
k1.m_namespaceContext);
- if (r.getType()== XObject.CLASS_NODESET)
- {
- if (((XNodeSet)r).nodeset().nextNode() == null)
- tryNextKey = false;
- }
- else if (r == null)
+ if (r == null)
tryNextKey = false;
double d ;
@@ -435,7 +432,17 @@
m_key1Value = new Double(Double.isNaN(d)? 0.0 : d);
}
else
+ {
m_key1Value = k1.m_col.getCollationKey(r.str());
+ }
+
+ if (r.getType()== XObject.CLASS_NODESET)
+ {
+ NodeIterator ni = (NodeIterator)r.object();
+ if(ni instanceof ContextNodeList)
+ tryNextKey = (((ContextNodeList)ni).getCurrentNode() != null);
+ // else abdicate... should never happen, but... -sb
+ }
if (m_keys.size()>1)
{