coliver 2004/04/24 14:35:35
Modified: src/java/org/apache/cocoon/generation JXTemplateGenerator.java Log: Allow a nodeset to be returned as the result of xpath evaluation Revision Changes Path 1.42 +26 -2 cocoon-2.1/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java Index: JXTemplateGenerator.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- JXTemplateGenerator.java 24 Apr 2004 15:59:52 -0000 1.41 +++ JXTemplateGenerator.java 24 Apr 2004 21:35:35 -0000 1.42 @@ -1136,7 +1136,31 @@ boolean oldLenient = jxpathContext.isLenient(); if (lenient != null) jxpathContext.setLenient(lenient.booleanValue()); try { - return e.getPointer(jxpathContext, expr.raw).getNode(); + Iterator iter = + e.iteratePointers(jxpathContext); + if (!iter.hasNext()) { + return null; + } + Pointer first = (Pointer)iter.next(); + if (!iter.hasNext()) { + return first.getNode(); + } + List result = new LinkedList(); + result.add(first.getNode()); + boolean dom = (first.getNode() instanceof Node); + while (iter.hasNext()) { + Object obj = ((Pointer)iter.next()).getNode(); + dom = dom && (obj instanceof Node); + result.add(obj); + } + Object[] arr; + if (dom) { + arr = new Node[result.size()]; + } else { + arr = new Object[result.size()]; + } + result.toArray(arr); + return arr; } finally { jxpathContext.setLenient(oldLenient); }