Mudanças entre as edições de "TPHXML"
(→Exemplo) |
|||
(13 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | O objeto 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=== | + | ==='''Propriedades'''=== |
{| class="wikitable" style="width: 100%" | {| class="wikitable" style="width: 100%" | ||
! Nome | ! Nome | ||
− | !Tipo | + | ! Tipo |
− | !Descrição | + | ! Descrição |
|- | |- | ||
− | | | + | | Texto |
− | |String | + | | 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=== | + | ==='''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; |
Edição atual tal como às 13h57min de 6 de março de 2025
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;