Class LazyString

java.lang.Object
net.sf.saxon.value.LazyString
All Implemented Interfaces:
GroundedValue, Sequence

public class LazyString extends Object implements GroundedValue
LazyString implements GroundedValue so it can be used as an entry in a map; however, despite the name, it is actually computed on demand. The value is always a single String. The reason it implements GroundedValue but not Item is that there's a tendency for code to assume that item instanceof AtomicValue will always be true if item is atomic.

The class is currently used for the stack trace property in the map available in a catch block. This computed lazily because it's potentially a large string and expensive to construct, and it's likely that most catch blocks aren't interested in it.

  • Constructor Details

  • Method Details

    • iterate

      public SequenceIterator iterate()
      Get an iterator over all the items in the sequence. This differs from the superclass method in not allowing an exception, either during this method call, or in the subsequent processing of the returned iterator.
      Specified by:
      iterate in interface GroundedValue
      Specified by:
      iterate in interface Sequence
      Returns:
      an iterator (meaning a Saxon SequenceIterator rather than a Java Iterator) over all the items in this Sequence.
    • itemAt

      public Item itemAt(int n)
      Get the n'th item in the value, counting from zero (0)
      Specified by:
      itemAt in interface GroundedValue
      Parameters:
      n - the index of the required item, with zero (0) representing the first item in the sequence
      Returns:
      the n'th item if it exists, or null if the requested position is out of range
    • head

      public Item head()
      Get the first item of the sequence. This differs from the parent interface in not allowing an exception
      Specified by:
      head in interface GroundedValue
      Specified by:
      head in interface Sequence
      Returns:
      the first item of the sequence, or null if the sequence is empty
    • subsequence

      public GroundedValue subsequence(int start, int length)
      Get a subsequence of the value
      Specified by:
      subsequence in interface GroundedValue
      Parameters:
      start - the index of the first item to be included in the result, counting from zero. A negative value is taken as zero. If the value is beyond the end of the sequence, an empty sequence is returned
      length - the number of items to be included in the result. Specify Integer.MAX_VALUE to get the subsequence up to the end of the base sequence. If the value is negative, an empty sequence is returned. If the length goes off the end of the sequence, the result returns items up to the end of the sequence
      Returns:
      the required subsequence.
    • getLength

      public int getLength()
      Get the size of the value (the number of items in the value, considered as a sequence)
      Specified by:
      getLength in interface GroundedValue
      Returns:
      the number of items in the sequence. Note that for a single item, including a map or array, the result is always 1 (one).
    • getUnicodeStringValue

      public UnicodeString getUnicodeStringValue() throws XPathException
      Get the string value of this sequence, as an instance of UnicodeString. The string value of an item is the result of applying the XPath string() function. The string value of a sequence is the space-separated result of applying the string-join() function using a single space as the separator

      The result of this method is always equivalent to the result of the getStringValue() method. Use this method in preference either (a) if you need to use the value in a context where a UnicodeString is required, or (b) if the underlying value is held as a UnicodeString, or in a form that is readily converted to a UnicodeString. This is typically the case (i) when the value is a text or element node in a TinyTree, and (ii) when the value is a StringItem: that is, an atomic value of type xs:string.

      Specified by:
      getUnicodeStringValue in interface GroundedValue
      Returns:
      the string value of the sequence.
      Throws:
      XPathException - if the sequence contains items that have no string value (for example, function items)
    • getStringValue

      public String getStringValue() throws XPathException
      Get the string value of this sequence, as an instance of String. The string value of an item is the result of applying the XPath string() function. The string value of a sequence is the space-separated result of applying the string-join() function using a single space as the separator.

      The result of this method is always equivalent to the result of the getUnicodeStringValue() method. Use this method in preference either (a) if you need to use the value in a context where a String is required, or (b) if the underlying value is held as a String, or in a form that is readily converted to a String. This is typically the case (i) when the value is an attribute node in a TinyTree, or (ii) any kind of node in a third-party tree model such as DOM.

      Specified by:
      getStringValue in interface GroundedValue
      Returns:
      the string value of the sequence.
      Throws:
      XPathException - if the sequence contains items that have no string value (for example, function items)