char *gen_lote_xml(LOTE *lote, EVP_PKEY *key, X509 *cert){ int rc; xmlTextWriterPtr writer; xmlDocPtr doc; xmlBufferPtr buf = xmlBufferCreate(); writer = xmlNewTextWriterDoc(&doc, 0); if (writer == NULL) return NULL; xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL); rc = xmlTextWriterStartElement(writer, BAD_CAST "enviNFe"); if (rc < 0) return NULL; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "xmlns", BAD_CAST "http://www.portalfiscal.inf.br/nfe"); if (rc < 0) return NULL; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST "versao", BAD_CAST NFE_VERSAO); if (rc < 0) return NULL; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "idLote", "%d", lote->id); if (rc < 0) return NULL; int indSinc = lote->qtd == 1? 1 : 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST "indSinc", "%d", indSinc); if (rc < 0) return NULL; int i; LOTE_ITEM *it = lote->nfes; for (i = 0; i < lote->qtd; i++){ char *xml; xml = generate_xml(it->nfe, key, cert); printf("%s\n", xml); rc = xmlTextWriterWriteRaw(writer, BAD_CAST xml); if (rc < 0) return NULL; it = it->next; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return NULL; xmlTextWriterEndDocument(writer); xmlNodeDump(buf, NULL, xmlDocGetRootElement(doc), 0, 0); return (char*)buf->content; }
void dump_xml(gchar *ofile) { FILE *fout; gchar *xml; if (!ofile) return; xml = generate_xml(); g_assert(xml); fout = fopen(ofile, "wb"); if (fout) { fprintf(fout, "%s", xml); fclose(fout); } g_free(xml); }