TPHXML
Conceito
O objeto TPHXML foi projetado para leitura de dados de arquivos XML. Ele permite a busca de elementos dentro de um XML, e fornece recursos para consumir arquivos XML.
Propriedades
| Nome | Tipo | Descrição |
|---|---|---|
| Texto | String | Armazena o texto contido em um elemento XML. |
Procedimentos
- LerXml(Xml: String): Carrega um XML a partir de uma string fornecida.
- Elemento(Index: Integer): Retorna o elemento na posição especificada pela lista de elementos.
- ElementoDoNome(Nome: String): Busca um elemento pelo nome no XML carregado.
- LoadFromFile(Arquivo: String): Carrega um arquivo XML do disco e processa com o método LerXml.
- Count: Retorna o número de elementos presentes na lista de elementos.
- RetornaXML: Retorna o XML armazenado na classe como uma string.
Exemplo(s)
Este exemplo mostra como utilizar a propriedade Count da classe TPHXML para iterar pelos elementos det de um XML e realizar ações específicas em cada produto. Além disso, a boa prática de criar objetos separados para os diferentes segmentos do XML (como ICMS e IPI) ajuda a otimizar a execução, isolando a lógica de cada parte do XML.
procedure ImportaXML;
var
ArqXML, DETXML, DETICMSXML, DETIPIXML:TPHXML;
I:Integer;
V_CodProduto, V_ICMSCST, V_IPIEnq:String
begin
ArqXML := TPHXML.Create;
try
ArqXML.LerXML(ParamByName('Arquivo').AsString);
IniciarTransacao;
try
for I := 0 to ArqXML.ElementoDoNome('det').Count - 1 do
begin
DETXML := TPHXML.Create;
try
DETXML.LerXML(ArqXML.ElementoDoNome('det').Elemento(I).RetornaXML);
{ DET }
V_CodProduto := DETXML.ElementoDoNome('cProd').Texto;
{ ICMS }
DETICMSXML := TPHXML.Create;
try
DETICMSXML.LerXML(DETXML.ElementoDoNome('ICMS').RetornaXML);
V_ICMSCST := DETICMSXML.ElementoDoNome('CST').Texto;
finally
DETICMSXML.Free;
end;
{ IPI }
DETIPIXML := TPHXML.Create;
try
DETIPIXML.LerXML(DETXML.ElementoDoNome('IPI').RetornaXML);
V_IPIEnq := DETIPIXML.ElementoDoNome('cEnq').Texto;
finally
DETIPIXML.Free;
end;
I := I + 1;
ConfirmarTransacao;
finally
DETXML.Free;
end;
end;
except
CancelarTransacao;
ErroValidacao(ExceptionMessage +' Produto: '+ V_CodProduto);
end;
finally
ArqXML.Free;
end;
end;