code: def update(self, use_template=False, **metadata_defaults):
          
  
          self.validate()
  
          tree_to_update = self._xml_tree if not use_template else self._get_template(**metadata_defaults)
          supported_props = self._metadata_props
  
          # Iterate over keys, and extract non-primitive root for all XPATHs
          #    xroot = identificationInfo/MD_DataIdentification/abstract/
          #    xpath = identificationInfo/MD_DataIdentification/abstract/CharacterString
          #
          # This prevents multiple primitive tags from being inserted under an element
  
          for prop, xpath in iteritems(self._data_map):
              if not prop.startswith('_') or prop.strip('_') in supported_props:
                  # Send only public or alternate properties
                  xroot = self._trim_xpath(xpath, prop)
                  values = getattr(self, prop, u'')
                  update_property(tree_to_update, xroot, xpath, prop, values, supported_props)
  
          return tree_to_update
docs: OVERRIDDEN: Prevents writing multiple CharacterStrings per XPATH property