code: def sget(self, path, default=NONE_NODE):
          u
          attrs = str(path).split(".")
          text_or_attr = None
          last_attr = attrs[-1]
          # Case of getting text or attribute
          if last_attr == '#text' or last_attr.startswith('@'):
              # #text => text, @attr => attr
              text_or_attr = last_attr[1:]
              attrs = attrs[:-1]
              # When getting #text and @attr we want default value to be None.
              if default is NONE_NODE:
                  default = None
  
          my_object = self
          for attr in attrs:
              try:
                  if isinstance(my_object, (list, tuple)) and re.match('^\-?\d+$', attr):
                      my_object_next = my_object[int(attr)]
                  else:
                      my_object_next = getattr(my_object, attr)
                  my_object = my_object_next
              except (AttributeError, KeyError, IndexError):
                  return default
  
          # Return #text or @attr
          if text_or_attr:
              try:
                  return my_object.getattr(text_or_attr)
              except AttributeError:
                  # myObject can be a list.
                  return None
          else:
              return my_object
docs: u"""Enables access to nodes if one or more of them don't exist.
  
          Example:
          >>> m = Mappet('<root><tag attr1="attr text">text value</tag></root>')
          >>> m.sget('tag')
          text value
          >>> m.sget('tag.@attr1')
          'attr text'
          >>> m.sget('tag.#text')
          'text value'
          >>> m.sget('reply.vms_model_cars.car.0.params.doors')
          NONE_NODE
  
          Accessing nonexistent path returns None-like object with mocked
          converting functions which returns None:
          >>> m.sget('reply.fake_node').to_dict() is None
          True