Robinho,
Na minha aplicação, o usuário primeiro digita os dados pertinentes ao transporte da carga e salvo esses dados no banco de dados.
Ele pode lançar quantos conhecimentos ele desejar, todos vão ficar salvos no banco de dados.
Até agora nada de XML foi gerado, apenas os dados foram digitados.
Quando ele desejar emitir os CT-e, uma tela é apresentada com a relação de todos os conhecimentos digitados mas que não foram emitidos.
Entenda "emitidos", como sendo: XML gerado, assinado, enviado, protocolado, DACTE impresso, XML (assinado e protocolado) enviado por e-mail para o tomador do serviço.
Sendo assim ele seleciona os conhecimentos não emitidos e clica no botão [Emitir] e tudo o que esta descrito acima é executado.
No meu caso o XML não é são no banco de dados apenas em disco, mas é no final de todo o processo, ou seja, depois de enviar o e-mail, que você atualiza o banco de dados "salvando o xml" no mesmo.