code: private String getStrValue() {
  
          final StringBuilder value = new StringBuilder();
  
          if (getNode().getDataKey() >= 0) { // is node
              if (getNode().getKind() == IConstants.ATTRIBUTE || getNode().getKind() == IConstants.TEXT) {
                  value.append(new String(((ITreeValData)getNode()).getRawValue()));
              } else if (getNode().getKind() == IConstants.ROOT || getNode().getKind() == IConstants.ELEMENT) {
                  final AbsAxis axis = new FilterAxis(new DescendantAxis(pRtx), pRtx, new TextFilter(pRtx));
                  while (axis.hasNext()) {
                      if (value.length() > 0) {
                          value.append(" ");
                      }
                      value.append(new String(((ITreeValData)getNode()).getRawValue()));
  
                  }
              } else {
                  throw new IllegalStateException();
              }
  
          } else {
              value.append(new String(((ITreeValData)getNode()).getRawValue()));
          }
  
          return value.toString();
      }
docs: Returns the string value of an item. If the item is the empty sequence,
  the zero-length string is returned. If the item is a node, the function
  returns the string-value of the node, as obtained using the
  dm:string-value accessor defined in the <a
  href="http://www.w3.org/TR/xpath-datamodel/#dm-string-value">Section 5.13
  string-value AccessorDM</a>. If the item is an atomic value, then the
  function returns the same string as is returned by the expression " $arg
  cast as xs:string " (see 17 Casting).
  
  @return the context item's string value.