# File lib/xml/xpath.rb, line 862
    def substring(start, len)
      start = start.round.to_f
      if start.infinite? or start.nan? then
        @value = ''
      elsif len then
        len = len.round.to_f
        maxlen = start + len
        len = maxlen - 1.0 if len >= maxlen
        if start <= 1.0 then
          start = 0
        else
          start = start.to_i - 1
        end
        if len.nan? or len < 1.0 then
          @value = ''
        elsif len.infinite? then
          # @value = @value[start..-1]
          /\A[\W\w]{0,#{start}}/ =~ @value
          @value = $'
        else
          # @value = @value[start, len.to_i]
          /\A[\W\w]{0,#{start}}([\W\w]{0,#{len.to_i}})/ =~ @value
          @value = $1
        end
      elsif start > 1.0 then
        # @value = @value[(start-1)..-1]
        /\A[\W\w]{0,#{start.to_i-1}}/ =~ @value
        @value = $'
      end
      raise "BUG" unless @value
      self
    end