private Object convertToSimpleTypeIfPresent(
      Object objectToAdd, AbstractRecord nestedRow, AbstractSession executionSession) {
    String stringValue = null;

    Element theElement = ((Element) ((DOMRecord) nestedRow).getDOM());
    Node textchild = theElement.getFirstChild();

    if ((textchild != null) && (textchild.getNodeType() == Node.TEXT_NODE)) {
      stringValue = ((Text) textchild).getNodeValue();
      if (stringValue != null
          && getKeepAsElementPolicy() != UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT
          && getKeepAsElementPolicy() != UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT) {
        objectToAdd = stringValue;
      }
    }
    if ((stringValue == null) || stringValue.length() == 0) {
      return objectToAdd;
    }

    String type =
        theElement.getAttributeNS(
            javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI,
            XMLConstants.SCHEMA_TYPE_ATTRIBUTE);
    if ((null != type) && type.length() > 0) {
      XPathFragment typeFragment = new XPathFragment(type);
      String namespaceURI =
          ((DOMRecord) nestedRow).resolveNamespacePrefix(typeFragment.getPrefix());
      typeFragment.setNamespaceURI(namespaceURI);
      QName schemaTypeQName = new QName(namespaceURI, typeFragment.getLocalName());
      ConversionManager conversionManager =
          (ConversionManager) executionSession.getDatasourcePlatform().getConversionManager();
      Class theClass = conversionManager.javaType(schemaTypeQName);
      if (theClass != null) {
        objectToAdd = conversionManager.convertObject(stringValue, theClass, schemaTypeQName);
      }
    }
    return objectToAdd;
  }