| 
<?phpnamespace Aws\Api\Parser;
 
 use Aws\Api\Service;
 use Aws\Result;
 use Aws\CommandInterface;
 use Psr\Http\Message\ResponseInterface;
 
 /**
 * @internal Parses query (XML) responses (e.g., EC2, SQS, and many others)
 */
 class QueryParser extends AbstractParser
 {
 use PayloadParserTrait;
 
 /** @var XmlParser */
 private $xmlParser;
 
 /** @var bool */
 private $honorResultWrapper;
 
 /**
 * @param Service   $api                Service description
 * @param XmlParser $xmlParser          Optional XML parser
 * @param bool      $honorResultWrapper Set to false to disable the peeling
 *                                      back of result wrappers from the
 *                                      output structure.
 */
 public function __construct(
 Service $api,
 XmlParser $xmlParser = null,
 $honorResultWrapper = true
 ) {
 parent::__construct($api);
 $this->xmlParser = $xmlParser ?: new XmlParser();
 $this->honorResultWrapper = $honorResultWrapper;
 }
 
 public function __invoke(
 CommandInterface $command,
 ResponseInterface $response
 ) {
 $output = $this->api->getOperation($command->getName())->getOutput();
 $xml = $this->parseXml($response->getBody());
 
 if ($this->honorResultWrapper && $output['resultWrapper']) {
 $xml = $xml->{$output['resultWrapper']};
 }
 
 return new Result($this->xmlParser->parse($output, $xml));
 }
 }
 
 |