public static com.sun.org.apache.xpath.internal.objects.XObject | create(java.lang.Object val, com.sun.org.apache.xpath.internal.XPathContext xctxt)Create the right XObject based on the type of the object passed.
This function can make an XObject that exposes DOM Nodes, NodeLists, and
NodeIterators to the XSLT stylesheet as node-sets.
XObject result;
if (val instanceof XObject)
{
result = (XObject) val;
}
else if (val instanceof String)
{
result = new XString((String) val);
}
else if (val instanceof Boolean)
{
result = new XBoolean((Boolean)val);
}
else if (val instanceof Number)
{
result = new XNumber(((Number) val));
}
else if (val instanceof DTM)
{
DTM dtm = (DTM)val;
try
{
int dtmRoot = dtm.getDocument();
DTMAxisIterator iter = dtm.getAxisIterator(Axis.SELF);
iter.setStartNode(dtmRoot);
DTMIterator iterator = new OneStepIterator(iter, Axis.SELF);
iterator.setRoot(dtmRoot, xctxt);
result = new XNodeSet(iterator);
}
catch(Exception ex)
{
throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(ex);
}
}
else if (val instanceof DTMAxisIterator)
{
DTMAxisIterator iter = (DTMAxisIterator)val;
try
{
DTMIterator iterator = new OneStepIterator(iter, Axis.SELF);
iterator.setRoot(iter.getStartNode(), xctxt);
result = new XNodeSet(iterator);
}
catch(Exception ex)
{
throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(ex);
}
}
else if (val instanceof DTMIterator)
{
result = new XNodeSet((DTMIterator) val);
}
// This next three instanceofs are a little worrysome, since a NodeList
// might also implement a Node!
else if (val instanceof org.w3c.dom.Node)
{
result = new XNodeSetForDOM((org.w3c.dom.Node)val, xctxt);
}
// This must come after org.w3c.dom.Node, since many Node implementations
// also implement NodeList.
else if (val instanceof org.w3c.dom.NodeList)
{
result = new XNodeSetForDOM((org.w3c.dom.NodeList)val, xctxt);
}
else if (val instanceof org.w3c.dom.traversal.NodeIterator)
{
result = new XNodeSetForDOM((org.w3c.dom.traversal.NodeIterator)val, xctxt);
}
else
{
result = new XObject(val);
}
return result;
|