Assinar XML com várias assinaturas (NFSE)
Enviado: 01 Abr 2024 17:14
Ainda estou fazendo os testes finais, mas.........
Na sefazclass atual, pra um único bloco:
Para um ou vários blocos:
Deu um certo trabalho, porque Len( oNodes ) retorna um número, que por coincidência batia com o primeiro teste, mas não serve.
NextNode() deu a impressão de começar no segundo, mas começa no primeiro.
A assinatura final é no último bloco de assinatura.
SelectSingleNode() só funciona quando o XML só tem uma assinatura, se tem mais de uma dá erro.
Só não testei assinar tudo de uma vez, mas de qualquer forma, a última assinatura depende disso acima pra funcionar.
Isso é o resultado se for testar ValType() de cada NextNode()
Quando NÃO é "O" significa que acabou, não adianta testar se é NIL.
o teste do print-screen é este:
Testado aqui com GTWVG.
Testado pelo Marcelo/RJ com FIVEWIN.
Na sefazclass atual, pra um único bloco:
Código: Selecionar todos
oBlocoAssinatura := oDoc:SelectSingleNode( ".//ds:Signature" )
Código: Selecionar todos
oNodes := oDoc:SelectNodes( ".//ds:Signature" )
DO WHILE .T.
oTemp := oNodes:NextNode()
IF ValType( oTemp ) != "O"
EXIT
ENDIF
oBlocoAssinatura := oTemp
ENDDO
IF ValType( oBlocoAssinatura ) != "O"
? "Não encontrou nenhum bloco de assinatura"
ENDIF
NextNode() deu a impressão de começar no segundo, mas começa no primeiro.
A assinatura final é no último bloco de assinatura.
SelectSingleNode() só funciona quando o XML só tem uma assinatura, se tem mais de uma dá erro.
Só não testei assinar tudo de uma vez, mas de qualquer forma, a última assinatura depende disso acima pra funcionar.
Isso é o resultado se for testar ValType() de cada NextNode()
Quando NÃO é "O" significa que acabou, não adianta testar se é NIL.
o teste do print-screen é este:
Código: Selecionar todos
FOR nCont = 1 TO 5
oResult := oNodes:NextNode()
? nCont, ValType( oResult )
NEXT
Testado pelo Marcelo/RJ com FIVEWIN.