Assinar XML NFS-e

Boa tarde!
Estou criando método para cancelar uma NFS-e, nota de serviço pelo sistema GINFES. O problema é que sempre me da a mensagem de arquivo fora do padrão, ou seja xml não esta correto. Então eu baixei o programa Altova e validei o xml. O único erro que ele me apresenta e o Id que não deve existir. Então se eu tirar este Id ele passa. O problema é que sem este Id eu não estou conseguindo assinar o XML, pois ele precisa deste elemento(Veja parte do código de assinatura abaixo). Então, como eu faço para assinar o xml sem esta campo Id?
`NodeList elements = doc.getElementsByTagName(“ConsultarLoteRpsEnvio”);
org.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(0);
String id = el.getAttribute(“Id”);
el.setIdAttribute(“Id”, true);

        Reference ref = fac.newReference("#".concat(id),
                fac.newDigestMethod(DigestMethod.SHA1, null),
                listTransforms, null, null);

        SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE,
                (C14NMethodParameterSpec) null),
                fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
                Collections.singletonList(ref));`

Ola Rpassos81,

no construtor do seu método você pode definir uma variável para este sinal(#) ex: String prefixoId, e passar null quando não tem o elemento Id, no seu código faça assim:

Reference ref;
    if (prefixoDoId != null) {
        String id = el.getAttribute("Id");
        ref = fac.newReference(prefixoDoId + id, fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);
    } else {
        ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);
    }

Bom dia!
Obrigado por responder.
Tudo certo, resolveu meu problema. Eu havia enviado null ao invez de “”.

Abraço!