private function createRequest($labelRecoveryRequest)
    {
        $xml = new DOMDocument();
        $xml->formatOutput = true;

        $trackRequest = $xml->appendChild($xml->createElement('LabelRecoveryRequest'));
        $trackRequest->setAttribute('xml:lang', 'en-US');

        $request = $trackRequest->appendChild($xml->createElement('Request'));

        $node = $xml->importNode($this->createTransactionNode(), true);
        $request->appendChild($node);

        $request->appendChild($xml->createElement('RequestAction', 'LabelRecovery'));

        $labelSpecificationNode = $trackRequest->appendChild($xml->createElement('LabelSpecification'));
        if (isset($labelRecoveryRequest->LabelSpecification)) {
            $labelSpecificationNode->appendChild($xml->createElement('HTTPUserAgent', $labelRecoveryRequest->LabelSpecification->HTTPUserAgent));
            $labelImageFormatNode = $labelSpecificationNode->appendChild($xml->createElement('LabelImageFormat'));
            $labelImageFormatNode->appendChild($xml->createElement('Code', $labelRecoveryRequest->LabelSpecification->LabelImageFormat->Code));
        }

        if (isset($labelRecoveryRequest->Translate)) {
            $translateNode = $trackRequest->appendChild($xml->createElement('Translate'));
            $translateNode->appendChild($xml->createElement('LanguageCode', $labelRecoveryRequest->Translate->LanguageCode));
            $translateNode->appendChild($xml->createElement('DialectCode', $labelRecoveryRequest->Translate->DialectCode));
            $translateNode->appendChild($xml->createElement('Code', $labelRecoveryRequest->Translate->Code));
        }

        if (isset($labelRecoveryRequest->LabelLinkIndicator)) {
            $labelLinkIndicatorNode = $trackRequest->appendChild($xml->createElement('LabelLinkIndicator'));
            $labelLinkIndicatorNode->appendChild($xml->createElement('LabelLinkIndicator'));
        }

        if (isset($labelRecoveryRequest->TrackingNumber)) {
            $trackRequest->appendChild($xml->createElement('TrackingNumber', $labelRecoveryRequest->TrackingNumber));
        }

        if (isset($labelRecoveryRequest->ReferenceNumber)) {
            $referenceNumberNode = $trackRequest->appendChild($xml->createElement('ReferenceNumber'));
            $referenceNumberNode->appendChild($xml->createElement('Value', $labelRecoveryRequest->ReferenceNumber->getValue()));
        }

        if (isset($labelRecoveryRequest->ShipperNumber)) {
            $trackRequest->appendChild($xml->createElement('ShipperNumber', $labelRecoveryRequest->ShipperNumber));
        }

        return $xml->saveXML();
    }