Como assinar o XML em um nó específico (Nota Fiscal)

Obrigado mais uma vez pela resposta, mas eu estou seguindo exatamente essa ordem, mas quando tento validar, ele da erro.
Se eu assinar apenas uma vez o documento, seja ele onde for, funciona, entretanto quando tento fazer a segunda assinatura que da o erro.
Eu to fazendo um modelo da nota fiscal, e assina ela no espaço Rps. Depois disso, antes de enviar eu uso a mesma função para assinar, só que agora no campo EnviarLoteRpsEnvio.
Minha nota fiscal sai igual ao modelo que o funcionário da SEFAZ Salvador me enviou, mas mesmo assim, não consigo nem enviar e nem validar ela na receita federal.
Vou tentar usar o seu código para ver o que consigo.

Inclusive estou utilizando a mesma biblioteca que você, do robrichards, e não estou reformatando nem nada o xml quando tento assinar ele pela segunda vez.

Estou fazendo assim na função:


$doc = new DOMDocument();
$doc->load('nota.xml');
$objDSig = new XMLSecurityDSig('');
$objDSig->setCanonicalMethod(XMLSecurityDSig::C14N);
$objDSig->addReference(
    $doc, 
    XMLSecurityDSig::SHA1, 
    ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', 
		'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'],
	['force_uri' => true, 'uri' => 'rpsId23253']	
);
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type'=>'private'));
$objKey->passphrase = '1234';
$objKey->loadKey(dirname(__FILE__).'/cert.pem', true);
$objDSig->sign($objKey);
$objDSig->add509Cert(file_get_contents(dirname(__FILE__).'/cert2.pem'));
$objDSig->appendSignature($doc->getElementsByTagName('Rps')->item(0));
//$objDSig->appendSignature($doc->documentElement);
$doc->save('notaassinada.xml');

$doc = new DOMDocument();
$doc->load('notaassinada.xml');
$objDSig = new XMLSecurityDSig('');
$objDSig->setCanonicalMethod(XMLSecurityDSig::C14N);
$objDSig->addReference(
    $doc, 
    XMLSecurityDSig::SHA1, 
    ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', 
		'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'],
	['force_uri' => true, 'uri' => 'AGZ001']
);
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type'=>'private'));
$objKey->passphrase = '1234';
$objKey->loadKey(dirname(__FILE__).'/cert.pem', true);
$objDSig->sign($objKey);
$objDSig->add509Cert(file_get_contents(dirname(__FILE__).'/cert2.pem'));
$objDSig->appendSignature($doc->getElementsByTagName('EnviarLoteRpsEnvio')->item(0));
//$objDSig->appendSignature($doc->documentElement);
$doc->save('notaassinada.xml');