Methods Summary |
---|
public void | appendToFsb(com.sun.org.apache.xml.internal.utils.FastStringBuffer fsb)Cast result object to a string.
XString xstring = (XString)xstr();
xstring.appendToFsb(fsb);
|
public boolean | bool()Cast result object to a boolean.
return (item(0) != DTM.NULL);
|
public boolean | boolWithSideEffects()Cast result object to a boolean, but allow side effects, such as the
incrementing of an iterator.
return (nextNode() != DTM.NULL);
|
public boolean | compare(com.sun.org.apache.xpath.internal.objects.XObject obj2, com.sun.org.apache.xpath.internal.objects.Comparator comparator)Tell if one object is less than the other.
boolean result = false;
int type = obj2.getType();
if (XObject.CLASS_NODESET == type)
{
// %OPT% This should be XMLString based instead of string based...
// From http://www.w3.org/TR/xpath:
// If both objects to be compared are node-sets, then the comparison
// will be true if and only if there is a node in the first node-set
// and a node in the second node-set such that the result of performing
// the comparison on the string-values of the two nodes is true.
// Note this little gem from the draft:
// NOTE: If $x is bound to a node-set, then $x="foo"
// does not mean the same as not($x!="foo"): the former
// is true if and only if some node in $x has the string-value
// foo; the latter is true if and only if all nodes in $x have
// the string-value foo.
DTMIterator list1 = iterRaw();
DTMIterator list2 = ((XNodeSet) obj2).iterRaw();
int node1;
java.util.Vector node2Strings = null;
while (DTM.NULL != (node1 = list1.nextNode()))
{
XMLString s1 = getStringFromNode(node1);
if (null == node2Strings)
{
int node2;
while (DTM.NULL != (node2 = list2.nextNode()))
{
XMLString s2 = getStringFromNode(node2);
if (comparator.compareStrings(s1, s2))
{
result = true;
break;
}
if (null == node2Strings)
node2Strings = new java.util.Vector();
node2Strings.addElement(s2);
}
}
else
{
int n = node2Strings.size();
for (int i = 0; i < n; i++)
{
if (comparator.compareStrings(s1, (XMLString)node2Strings.elementAt(i)))
{
result = true;
break;
}
}
}
}
list1.reset();
list2.reset();
}
else if (XObject.CLASS_BOOLEAN == type)
{
// From http://www.w3.org/TR/xpath:
// If one object to be compared is a node-set and the other is a boolean,
// then the comparison will be true if and only if the result of
// performing the comparison on the boolean and on the result of
// converting the node-set to a boolean using the boolean function
// is true.
double num1 = bool() ? 1.0 : 0.0;
double num2 = obj2.num();
result = comparator.compareNumbers(num1, num2);
}
else if (XObject.CLASS_NUMBER == type)
{
// From http://www.w3.org/TR/xpath:
// If one object to be compared is a node-set and the other is a number,
// then the comparison will be true if and only if there is a
// node in the node-set such that the result of performing the
// comparison on the number to be compared and on the result of
// converting the string-value of that node to a number using
// the number function is true.
DTMIterator list1 = iterRaw();
double num2 = obj2.num();
int node;
while (DTM.NULL != (node = list1.nextNode()))
{
double num1 = getNumberFromNode(node);
if (comparator.compareNumbers(num1, num2))
{
result = true;
break;
}
}
list1.reset();
}
else if (XObject.CLASS_RTREEFRAG == type)
{
XMLString s2 = obj2.xstr();
DTMIterator list1 = iterRaw();
int node;
while (DTM.NULL != (node = list1.nextNode()))
{
XMLString s1 = getStringFromNode(node);
if (comparator.compareStrings(s1, s2))
{
result = true;
break;
}
}
list1.reset();
}
else if (XObject.CLASS_STRING == type)
{
// From http://www.w3.org/TR/xpath:
// If one object to be compared is a node-set and the other is a
// string, then the comparison will be true if and only if there
// is a node in the node-set such that the result of performing
// the comparison on the string-value of the node and the other
// string is true.
XMLString s2 = obj2.xstr();
DTMIterator list1 = iterRaw();
int node;
while (DTM.NULL != (node = list1.nextNode()))
{
XMLString s1 = getStringFromNode(node);
if (comparator.compareStrings(s1, s2))
{
result = true;
break;
}
}
list1.reset();
}
else
{
result = comparator.compareNumbers(this.num(), obj2.num());
}
return result;
|
public void | dispatchCharactersEvents(org.xml.sax.ContentHandler ch)Directly call the
characters method on the passed ContentHandler for the
string-value. Multiple calls to the
ContentHandler's characters methods may well occur for a single call to
this method.
int node = item(0);
if(node != DTM.NULL)
{
m_dtmMgr.getDTM(node).dispatchCharactersEvents(node, ch, false);
}
|
public boolean | equals(com.sun.org.apache.xpath.internal.objects.XObject obj2)Tell if two objects are functionally equal.
try
{
return compare(obj2, S_EQ);
}
catch(javax.xml.transform.TransformerException te)
{
throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(te);
}
|
public com.sun.org.apache.xpath.internal.objects.XObject | getFresh()Get a fresh copy of the object. For use with variables.
try
{
if(hasCache())
return (XObject)cloneWithReset();
else
return this; // don't bother to clone... won't do any good!
}
catch (CloneNotSupportedException cnse)
{
throw new RuntimeException(cnse.getMessage());
}
|
public double | getNumberFromNode(int n)Get numeric value of the string conversion from a single node.
XMLString xstr = m_dtmMgr.getDTM(n).getStringValue(n);
return xstr.toDouble();
|
public com.sun.org.apache.xml.internal.utils.XMLString | getStringFromNode(int n)Get the string conversion from a single node.
// %OPT%
// I guess we'll have to get a static instance of the DTM manager...
if(DTM.NULL != n)
{
return m_dtmMgr.getDTM(n).getStringValue(n);
}
else
{
return com.sun.org.apache.xpath.internal.objects.XString.EMPTYSTRING;
}
|
public int | getType()Tell that this is a CLASS_NODESET.
return CLASS_NODESET;
|
public java.lang.String | getTypeString()Given a request type, return the equivalent string.
For diagnostic purposes.
return "#NODESET";
|
public boolean | greaterThan(com.sun.org.apache.xpath.internal.objects.XObject obj2)Tell if one object is less than the other.
return compare(obj2, S_GT);
|
public boolean | greaterThanOrEqual(com.sun.org.apache.xpath.internal.objects.XObject obj2)Tell if one object is less than the other.
return compare(obj2, S_GTE);
|
public com.sun.org.apache.xml.internal.dtm.DTMIterator | iter()Cast result object to a nodelist.
try
{
if(hasCache())
return cloneWithReset();
else
return this; // don't bother to clone... won't do any good!
}
catch (CloneNotSupportedException cnse)
{
throw new RuntimeException(cnse.getMessage());
}
|
public com.sun.org.apache.xml.internal.dtm.DTMIterator | iterRaw()Return the iterator without cloning, etc.
return this;
|
public boolean | lessThan(com.sun.org.apache.xpath.internal.objects.XObject obj2)Tell if one object is less than the other.
return compare(obj2, S_LT);
|
public boolean | lessThanOrEqual(com.sun.org.apache.xpath.internal.objects.XObject obj2)Tell if one object is less than or equal to the other.
return compare(obj2, S_LTE);
|
public com.sun.org.apache.xpath.internal.NodeSetDTM | mutableNodeset()Cast result object to a mutableNodeset.
NodeSetDTM mnl;
if(m_obj instanceof NodeSetDTM)
{
mnl = (NodeSetDTM) m_obj;
}
else
{
mnl = new NodeSetDTM(iter());
m_obj = mnl;
setCurrentPos(0);
}
return mnl;
|
public org.w3c.dom.NodeList | nodelist()Cast result object to a nodelist.
com.sun.org.apache.xml.internal.dtm.ref.DTMNodeList nodelist = new com.sun.org.apache.xml.internal.dtm.ref.DTMNodeList(this);
// Creating a DTMNodeList has the side-effect that it will create a clone
// XNodeSet with cache and run m_iter to the end. You cannot get any node
// from m_iter after this call. As a fix, we call SetVector() on the clone's
// cache. See Bugzilla 14406.
XNodeSet clone = (XNodeSet)nodelist.getDTMIterator();
SetVector(clone.getVector());
return nodelist;
|
public org.w3c.dom.traversal.NodeIterator | nodeset()Cast result object to a nodelist.
return new com.sun.org.apache.xml.internal.dtm.ref.DTMNodeIterator(iter());
|
public boolean | notEquals(com.sun.org.apache.xpath.internal.objects.XObject obj2)Tell if two objects are functionally not equal.
return compare(obj2, S_NEQ);
|
public double | num()Cast result object to a number.
int node = item(0);
return (node != DTM.NULL) ? getNumberFromNode(node) : Double.NaN;
|
public double | numWithSideEffects()Cast result object to a number, but allow side effects, such as the
incrementing of an iterator.
int node = nextNode();
return (node != DTM.NULL) ? getNumberFromNode(node) : Double.NaN;
|
public java.lang.Object | object()Return a java object that's closest to the representation
that should be handed to an extension.
if(null == m_obj)
return this;
else
return m_obj;
|
public void | release(com.sun.org.apache.xml.internal.dtm.DTMIterator iter)
|
public java.lang.String | str()Cast result object to a string.
int node = item(0);
return (node != DTM.NULL) ? getStringFromNode(node).toString() : "";
|
public com.sun.org.apache.xml.internal.utils.XMLString | xstr()Cast result object to an XMLString.
int node = item(0);
return (node != DTM.NULL) ? getStringFromNode(node) : XString.EMPTYSTRING;
|