You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mm...@locus.apache.org on 2000/08/17 23:00:02 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/transformer NodeSorter.java
mmidy 00/08/17 14:00:01
Modified: java/src/org/apache/xalan/transformer NodeSorter.java
Log:
When primary sort key fails, do not sort on secondary
Revision Changes Path
1.3 +27 -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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- NodeSorter.java 2000/07/05 14:42:54 1.2
+++ NodeSorter.java 2000/08/17 21:00:01 1.3
@@ -63,6 +63,7 @@
import org.apache.xpath.XPathContext;
import org.apache.xpath.NodeSet;
import org.apache.xpath.objects.XObject;
+import org.apache.xpath.objects.XNodeSet;
import org.apache.xalan.utils.NodeVector;
import org.xml.sax.SAXException;
@@ -411,11 +412,21 @@
NodeCompareElem(Node node) throws org.xml.sax.SAXException
{
+ boolean tryNextKey = true;
m_node = node;
if (!m_keys.isEmpty())
{
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)
+ tryNextKey = false;
+
double d ;
if(k1.m_treatAsNumbers)
{
@@ -429,14 +440,24 @@
if (m_keys.size()>1)
{
NodeSortKey k2 = (NodeSortKey)m_keys.elementAt(1);
- XObject r2 = k2.m_selectPat.execute(m_execContext, node, k2.m_namespaceContext);
- if(k2.m_treatAsNumbers)
- {
- d = r2.num();
- m_key2Value = new Double(Double.isNaN(d)? 0.0 : d);
+ if (!tryNextKey)
+ {
+ if(k2.m_treatAsNumbers)
+ m_key2Value = new Double(0.0);
+ else
+ m_key2Value = k2.m_col.getCollationKey("");
}
else
- m_key2Value = k2.m_col.getCollationKey(r2.str());
+ {
+ XObject r2 = k2.m_selectPat.execute(m_execContext, node, k2.m_namespaceContext);
+ if(k2.m_treatAsNumbers)
+ {
+ d = r2.num();
+ m_key2Value = new Double(Double.isNaN(d)? 0.0 : d);
+ }
+ else
+ m_key2Value = k2.m_col.getCollationKey(r2.str());
+ }
}
/* Leave this in case we decide to use an array later
while (kIndex <= m_keys.size() && kIndex < maxkey)