A tag começa com <tag> e termina com </tag>
E uma tag pode conter sub-tags.
O cnpj do emitente ficaria assim:
Código: Selecionar todos
mXml := "<cnpj>" + emitente->cnpj + "</cnpj>"
Código: Selecionar todos
mXml := "<nome>" + emitente->nome + "</nome>"
Código: Selecionar todos
mXml := "<emitente>" + ;
"<cnpj>" + emitente->cnpj + "</cnpj>" + ;
"<nome>" + emitente->nome + "</nome>" + ;
"</emitente>"
Pra isso, criamos uma função, só precisando passar o nome e o conteúdo.
E pode confundir o abrir/fechar, quando o Xml vai ficando extenso.
Então vamos separar em blocos.
Abaixo um fonte mais completo, só pra dar uma idéia.
Código: Selecionar todos
mXmlNota := XmlTag("nota",notafiscal->numero) + ;
XmlTag("emissao",Dtos(notafiscal->emissao)) + ;
XmlTag("natureza",notfiscal->natureza)
mXmlEmitente := XmlTag("cnpj",emitente->cnpj) + ;
XmlTag("nome",emitente->nome) + ;
XmlTag("endereco",emitente->endereco) + ;
XmlTag("cidade",emitente->cidade) + ;
XmlTag("UF", emitente->uf)
mXmlDestinatario := XmlTag("cnpj",cliente->cnpj) + ;
XmlTag("nome",emitente->nome) + ;
XmlTag("endereco",emitente->endereco) + ;
XmlTag("cidade",emitente->cidade) + ;
XmlTag("UF",emitente->UF)
mXmlProduto := XmlTag("produto",produto->nome) + ;
XmlTag("Qtde",Ltrim(Str(produto->Qtde,16,2))) + ;
XmlTag("Valor",Ltrim(Str(produto->Valor,16,4)))
mXmlGeral := ;
XmlTag("Nota",mXmlNota) + ;
XmlTag("emitente",mXmlEmitente) + ;
XmlTag("destinatario",mXmlDestinatario") + ;
XmlTag("produto",mXmlProduto)
MemoWrit(ArquivoXml,mXmlGeral)
Function XmlTag(cTag, cConteudo)
Local cTexto := ""
cTexto := "<" + cTag + ">" + cConteudo + "</" + cTag + ">"
Return cTexto
Outra opção dos dados de clientes, por exemplo, poderia ser um Array.
Código: Selecionar todos
aDadosCli := {}
Aadd(aDadosCli,{"CNPJ",clientes->Cnpj})
Aadd(aDadosCli,{"Nome",clientes->Nome})
Aadd(aDadosCli,{"Endereco",clientes->Endereco})
Aadd(aDadosCli,{"Cidade",clientes->Cidade})
Aadd(aDadosCli,{"UF",clientes->Uf})
mXml := ""
For nCont = 1 To Len(aDadosCli)
cCampo := aDadosCli[nCont,1]
cConteudo := aDadosCli[nCont,2]
mXml := mXml + "<" + cCampo + ">" + cConteudo + "</" + cCampo + ">"
Next
As opções são muitas, aqui tem apenas algumas para ajudar.
De repente poderia usar o eval() no array, mas nunca usei isso, e não saberia ensinar.
Esse fonte é simples e prático.
Tem um componente da Microsoft pra XML, mas em VB uso o fonte exatamente igual.
O componente da Microsoft parece só complicar, assim como algumas classes criadas pra XML que existem por aí.
Espero que este post ajude.
Obs. Estas e outras dicas estão em meu site, ainda com cores zoneadas, devido a testes.



