No geral, uma função pra leitura e outra pra geração.
Dá pra começar fazendo uma função para as tags, que tem o formato <tag>conteudo</tag>
A partir daí, começa a ficar mais fácil gerar um xml.
Só exemplos básicos, pra começo do projeto
Código: Selecionar todos
mXmlEmitente = ;
XmlTag("cnpj",Cnpj) + ;
XmlTag("nome",nome) + ;
XmlTag("endereco",endereco) + ;
XmlTag("cidade",cidade) + ;
XmlTag("UF",uf)
mXmlDestinatario = ;
XmlTag("cnpj",Cnpj) + ;
XmlTag("nome",nome) + ;
XmlTag("endereco",endereco) + ;
XmlTag("cidade",cidade) + ;
XmlTag("UF",uf)
mXmlNota = ;
XmlTag("emitente",mXmlEmitente) + ;
XmlTag("destinatario",mXmlDestinatario)
mXmlNota = XmlTag("nota",mXmlNota)
Function XmlTag(cCampo,cConteudo)
Return "<" + cCampo + ">" + cConteudo + "</" + cCampo + ">"
Código: Selecionar todos
mXlmNota = MemoRead("arquivoXml")
mXmlEmitente = XmlNode(mXmlNota,"emitente")
mCnpj = XmlNode(mXmlEmitente,"cnpj")
mNome = XmlNode(mXmlEmitente,"nome")
mEndereco = XmlNode(mXmlEmitente,"endereco")
mXmlDestinatario = XmlNode(mXmlNota,"destinatario")
Function XmlNode(mXml,mNode)
Local mTexto := "", mInicio := 0, mFim := 0
mInicio := At("<" + mNode + ">",mXml)
mFim := At("</" + mNode + ">", mXml)
If mInicio != 0 .And. mFim != 0
mTexto := Substr(mXml,mInicio,mFim-mInicio+1)
Endif
Return mTexto
Apenas digitei como exemplo direto no post, pra servir como referência, não cheguei a compilar.
O princípio base do XML são os indicadores de início e fim de blocos, com <tag> e </tag>.
Entendendo isso, fica até mais fácil gerar xml do que os txts tradicionais.


