docs: def get_edxml(self):
          """stub"""
          if self.has_raw_edxml():
              has_python = False
              my_files = self.my_osid_object.object_map['fileIds']
              raw_text = self.get_text('edxml').text
              soup = BeautifulSoup(raw_text, 'xml')
              # replace all file listings with an appropriate path...
              attrs = {
                  'draggable': 'icon',
                  'drag_and_drop_input': 'img',
                  'files': 'included_files',
                  'img': 'src'
              }
              local_regex = re.compile('[^http]')
              for key, attr in attrs.items():
                  search = {attr: local_regex}
                  tags = soup.find_all(**search)
                  for item in tags:
                      if key == 'files' or item.name == key:
                          file_label = self._clean(item[attr])
                          if file_label in my_files:
                              content_type = Id(my_files[file_label]['assetContentTypeId'])
                              item[attr] = '/static/' + file_label + '.' + \
                                           content_type.get_identifier()
  
              # replace any python script with the item's get_text('python_script')
              # text...will fix weird whitespace issues
              if len(soup.find_all('script')) >= 1:
                  scripts = soup.find_all('script')
                  for script in scripts:
                      if 'python' in script['type']:
                          has_python = True
                          # contents = script.contents[0]
                          # contents.replaceWith(str(NavigableString(self.python)))
                          break
  
              try:
                  if has_python:
                      return str(soup.find('problem'))
                  else:
                      return soup.find('problem').prettify()
              except Exception:
                  # if the edxml is not valid XML, it will not parse properly in soup
                  # return just the raw edxml
                  return self.get_text('edxml').text
          else:
              # have to construct the edxml from various components
              obj_map = self.my_osid_object.object_map
              question = obj_map['question']
              answers = obj_map['answers']
              if 'edx-multi-choice-problem-type' in obj_map['genusTypeId']:
                  # get answer Ids to compare them to the choices
                  answer_ids = []
                  for answer in answers:
                      answer_ids += answer['choiceIds']
                  # add the body text element (item.question.text)
                  soup = BeautifulSoup('<problem></problem>', 'xml')
                  p = soup.new_tag('p')
                  p.string = self.get_text('questionString').text
                  problem = soup.find('problem')
                  problem.append(p)
                  # add the metadata
                  problem['display_name'] = question['displayName']['text']
                  problem['showanswer'] = self.showanswer
                  if 'rerandomize' in obj_map:
                      problem['rerandomize'] = obj_map['rerandomize']
                  elif 'rerandomize' in question:
                      problem['rerandomize'] = question['rerandomize']
                  problem['max_attempts'] = self.attempts
  
                  # add the choices
                  multichoice = soup.new_tag('multiplechoiceresponse')
                  problem.append(multichoice)
  
                  choicegroup = soup.new_tag('choicegroup')
                  choicegroup['direction'] = 'vertical'
                  multichoice.append(choicegroup)
  
                  choices = question['choices']
                  for choice in choices:
                      new_choice = soup.new_tag('choice')
  
                      # mark the correct choice(s)
                      if choice['id'] in answer_ids:
                          new_choice['correct'] = 'true'
                      else:
                          new_choice['correct'] = 'false'
  
                      new_choice['name'] = choice['name']
                      choice_text = soup.new_tag('text')
                      choice_text.string = choice['text']
                      new_choice.append(choice_text)
                      choicegroup.append(new_choice)
                  return problem.prettify()
          raise IllegalState('records.assessment.edx.item_records.get_edxml()')