Para quem deseja comecar a preparar o sistema da NF-e (Nota Fiscal Eletronica), aqui vai uma dica muito interessante: como montar parte da estrutura XML.E importante lembrar que, a NF-e utiliza muito mais que isso. Nao e so a estruturacao do arquivo XML que e necessario, mas sim todo processo de validacao dos dados, assinatura do arquivo, certificado etc.Mas aqui falaremos apenas sobre a estrutura inicial do XML.Neste exemplo a seguir sera mostrado como: adicionar um no; e como adicionar um no como filho de outro no.Breve explicacao do que sera feito:>> Vamos declarar uma variavel do tipo IXmlNode, ela sera chamada de "Root", e sera usada por varios procedimentos.>> Criaremos tres procedimentos: CabecalhoXML; Informacao1 e Informacao2.No CabecalhoXML e onde sera criado todo o cabecalho do arquivo XML.Em Informacao1 e Informacao2, e onde ira conter os dados que ira compor o arquivo.>> Criaremos uma funcao: CriaDirCaminho(const NomeSubDir: string): boolean;Essa funcao e para criar uma pasta (no nosso exemplo, sera a pasta "TESTE") em um diretorio qualquer informado (no nosso exemplo, sera no diretorio "H", mude para um de sua preferencia).>>E adicionaremos um botao no formulario: nele sera colocado informacoes de entrada e saida do arquivo XML.Eis o significado de alguns termos que sera utilizado na codificacao:XMLDocument1 -> e o componente do XML.IXmlNode -> e como se fosse o raiz, nele contem os nos filhos do XML.AddChild -> Adiciona um elemento filho a um no XMLNodeValue -> Retorna o valor do no do objeto XML.Resumindo: na verdade sao arvores de no em qual cada no e um elemento.Iniciando o projeto:Abra o Delphi.Na aba INTERNET, adicione ao formulario um TXMLDocument.Adicione um botao, onde sera armazenado o codigo.Vamos a codificacao:Crie os tres procedimentos: procedure CabecalhoXML; procedure Informacao1; procedure Informacao2;E uma funcao: CriaDirCaminho(const NomeSubDir: string): boolean;Declare a variavel como global ---> Root : IXmlNode;Atencao aos codigos:Esse e o codigo da funcao para criar uma Pasta no diretorio:function TForm1.CriaDirCaminho(const NomeSubDir: string): boolean;var Dir : string;beginDir := 'H:'+'\'+NomeSubDir;if not DirectoryExists(Dir) thenForceDirectories(Dir);end;Codigo do procedimento de CabecalhoXML:procedure TForm1.CabecalhoXML;var versao : real;id : integer;begin//Transformando "," em "." (virgula em ponto)DecimalSeparator := '.';//Preenchendo variaveis:id := 12345;versao:= 1.00;XMLDocument1.Options := [doNodeAutoIndent];//Ativa XMLXMLDocument1.Active := True;//CabecalhoXMLDocument1.Encoding := 'utf-8';XMLDocument1.Version := '1.0';//Declara o Namespace (se houver)Root := XMLDocument1.addChild('Delphizinho','http://www.delphizinho.blogspot.com');//Identificacao (se houver)Root := Root.AddChild('atributos');Root.Attributes['Id'] := id;Root.Attributes['versao'] := FormatFloat('0.00', versao);//Retornando "." para "," (ponto para virgula)DecimalSeparator := ',';end;Codigo do procedimento de Informacao1:procedure TForm1.Informacao1;begin//ROOT raiz de informacao1//AddChild -> Inicio do no em informacao1with Root.AddChild('informacao1') do beginAddChild('nome').NodeValue := 'Carlos Felizberto Assis';AddChild('idade').NodeValue := '30';AddChild('sexo').NodeValue := 'Masculino'end; //fim de informacao1end;Codigo do procedimento de Informacao2:procedure TForm1.Informacao2;begin//ROOT raiz de informacao2//AddChild -> Inicio do no em informacao2with Root.AddChild('informacao2') do beginAddChild('telefone').NodeValue := '(021)5555-5555';AddChild('celular').NodeValue := '(021)8888-8888';//AddChild -> Adiciona um no como filho de outro nowith AddChild('endereco') do beginAddChild('rua').NodeValue := 'Rua da Felicidade';AddChild('numero').NodeValue := 's/n';AddChild('complemento').NodeValue := 'quadra 5000'end; //fim de enderecoAddChild('observacao').NodeValue := 'sem observacao';end; //fim de informacao2end;Codigo do procedimento do Botao:procedure TForm1.BitBtn1Click(Sender: TObject);var Nome_Arquivo, Caminho : string;beginXMLDocument1.Active := False;XMLDocument1.XML.Clear;//Cria pasta Teste1 no diretorio H (caso nao exista)CriaDirCaminho('Teste'); //funcao para criar a pasta Teste//Preenchendo variaveis:Nome_Arquivo := ''; //limpaNome_Arquivo := 'Teste1'; //Indica nome do arquivo XMLCaminho := ''; //limpaCaminho := 'H:\Teste'; //Indica caminho a ser gravado o XML//Chamada do Cabecalho:CabecalhoXML;//Chamada de dados de