DomXmlParser.prototype.parse = function()

in src/aws-client.js [13808:13876]


  DomXmlParser.prototype.parse = function(xml, shape) {
    if (xml.replace(/^\s+/, '') === '') return {};
  
    var result, error;
    try {
      if (window.DOMParser) {
        try {
          var parser = new DOMParser();
          result = parser.parseFromString(xml, 'text/xml');
        } catch (syntaxError) {
          throw util.error(new Error('Parse error in document'),
            {
              originalError: syntaxError,
              code: 'XMLParserError',
              retryable: true
            });
        }
  
        if (result.documentElement === null) {
          throw util.error(new Error('Cannot parse empty document.'),
            {
              code: 'XMLParserError',
              retryable: true
            });
        }
  
        var isError = result.getElementsByTagName('parsererror')[0];
        if (isError && (isError.parentNode === result ||
            isError.parentNode.nodeName === 'body' ||
            isError.parentNode.parentNode === result ||
            isError.parentNode.parentNode.nodeName === 'body')) {
          var errorElement = isError.getElementsByTagName('div')[0] || isError;
          throw util.error(new Error(errorElement.textContent || 'Parser error in document'),
            {
              code: 'XMLParserError',
              retryable: true
            });
        }
      } else if (window.ActiveXObject) {
        result = new window.ActiveXObject('Microsoft.XMLDOM');
        result.async = false;
  
        if (!result.loadXML(xml)) {
          throw util.error(new Error('Parse error in document'),
            {
              code: 'XMLParserError',
              retryable: true
            });
        }
      } else {
        throw new Error('Cannot load XML parser');
      }
    } catch (e) {
      error = e;
    }
  
    if (result && result.documentElement && !error) {
      var data = parseXml(result.documentElement, shape);
      var metadata = getElementByTagName(result.documentElement, 'ResponseMetadata');
      if (metadata) {
        data.ResponseMetadata = parseXml(metadata, {});
      }
      return data;
    } else if (error) {
      throw util.error(error || new Error(), {code: 'XMLParserError', retryable: true});
    } else { // empty xml document
      return {};
    }
  };