sboag 01/07/13 12:13:36
Modified: java/src/org/apache/xalan/extensions
XSLProcessorContext.java
Log:
Fix problem reported by jason heddings <[EMAIL PROTECTED]>.
"In v2.0.1, I was able to pass a Node to this function and have the node
be copied to the result tree (as expected). In the source code for
XSLProcessorContext, it appears that the only objects that can be sent
to the result tree are XObjects. Everything else is converted to a
String. So for instance, I can no longer create a ProcessingInstruction
and pass it to the result tree via this method since the PI is simply
converted to a String."
Revision Changes Path
1.11 +40 -18
xml-xalan/java/src/org/apache/xalan/extensions/XSLProcessorContext.java
Index: XSLProcessorContext.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/XSLProcessorContext.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- XSLProcessorContext.java 2001/06/15 17:53:59 1.10
+++ XSLProcessorContext.java 2001/07/13 19:13:31 1.11
@@ -56,11 +56,10 @@
*/
package org.apache.xalan.extensions;
-//import org.w3c.dom.Node;
-//import org.w3c.dom.DocumentFragment;
-//import org.w3c.dom.traversal.NodeIterator;
-import org.apache.xml.dtm.DTM;
-import org.apache.xml.dtm.DTMIterator;
+import org.w3c.dom.Node;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.traversal.NodeIterator;
+import org.apache.xml.dtm.*;
import org.apache.xalan.transformer.TransformerImpl;
import org.apache.xalan.transformer.ResultTreeHandler;
@@ -77,6 +76,8 @@
import org.apache.xpath.objects.XRTreeFrag;
import org.apache.xpath.objects.XNodeSet;
import org.apache.xpath.XPathContext;
+import org.apache.xpath.axes.DescendantIterator;
+import org.apache.xpath.axes.OneStepIterator;
import org.apache.xml.dtm.DTM;
@@ -201,6 +202,7 @@
try
{
ResultTreeHandler rtreeHandler = transformer.getResultTreeHandler();
+ XPathContext xctxt = transformer.getXPathContext();
XObject value;
// Make the return object into an XObject because it
@@ -222,20 +224,40 @@
else if (obj instanceof Double)
{
value = new XNumber(((Double) obj).doubleValue());
+ }
+ else if (obj instanceof DocumentFragment)
+ {
+ int handle = xctxt.getDTMHandleFromNode((DocumentFragment)obj);
+
+ value = new XRTreeFrag(handle, xctxt);
+ }
+ else if (obj instanceof DTM)
+ {
+ DTM dtm = (DTM)obj;
+ DTMIterator iterator = new DescendantIterator();
+ iterator.setRoot(dtm.getDocument(), xctxt);
+ value = new XNodeSet(iterator);
+ }
+ else if (obj instanceof DTMAxisIterator)
+ {
+ DTMAxisIterator iter = (DTMAxisIterator)obj;
+ DTMIterator iterator = new OneStepIterator(iter);
+ value = new XNodeSet(iterator);
+ }
+ else if (obj instanceof DTMIterator)
+ {
+ value = new XNodeSet((DTMIterator) obj);
+ }
+ else if (obj instanceof NodeIterator)
+ {
+ value = new XNodeSet(new
org.apache.xpath.NodeSetDTM(((NodeIterator)obj), xctxt));
+ }
+ else if (obj instanceof org.w3c.dom.Node)
+ {
+ value =
+ new XNodeSet(xctxt.getDTMHandleFromNode((org.w3c.dom.Node) obj),
+ xctxt.getDTMManager());
}
- // %TDM%
-// else if (obj instanceof DocumentFragment)
-// {
-// value = new XRTreeFrag((DocumentFragment) obj);
-// }
-// else if (obj instanceof Node)
-// {
-// value = new XNodeSet((Node) obj);
-// }
-// else if (obj instanceof NodeIterator)
-// {
-// value = new XNodeSet((NodeIterator) obj);
-// }
else
{
value = new XString(obj.toString());
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]