Mudanças entre as edições de "TPHXML"

 
(10 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
 +
==='''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.
  
A classe TPHXml foi projetada para manipulação de dados XML de forma simples e eficiente. Ela permite a leitura de XML, 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  
Linha 13: Linha 13:
 
|}
 
|}
  
===Procedimentos===
+
==='''Procedimentos'''===
 
*'''LerXml(Xml: String):''' Carrega um XML a partir de uma string fornecida.
 
*'''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.
 
*'''Elemento(Index: Integer):''' Retorna o elemento na posição especificada pela lista de elementos.
Linha 21: Linha 21:
 
*'''RetornaXML:''' Retorna o XML armazenado na classe como uma string.
 
*'''RetornaXML:''' Retorna o XML armazenado na classe como uma string.
  
===Exemplo(s)===
+
==='''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.
+
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;
 
  procedure ImportaXML;
 
  var
 
  var
 
   ArqXML, DETXML, DETICMSXML, DETIPIXML:TPHXML;                         
 
   ArqXML, DETXML, DETICMSXML, DETIPIXML:TPHXML;                         
   I:Integer;                               
+
   I:Integer;  
 +
  V_CodProduto, V_ICMSCST, V_IPIEnq:String                              
 
  begin                                                                                                         
 
  begin                                                                                                         
 
   ArqXML := TPHXML.Create;
 
   ArqXML := TPHXML.Create;
Linha 35: Linha 36:
 
            
 
            
 
     IniciarTransacao;                       
 
     IniciarTransacao;                       
     try                                                                                      
+
     try
       for I := 0 to ArqXML.ElementoDoNome('det').Count - 1 do                                                                                            
+
       for I := 0 to ArqXML.ElementoDoNome('det').Count - 1 do
 
       begin
 
       begin
 
         DETXML := TPHXML.Create;
 
         DETXML := TPHXML.Create;
Linha 50: Linha 51:
 
             DETICMSXML.LerXML(DETXML.ElementoDoNome('ICMS').RetornaXML);
 
             DETICMSXML.LerXML(DETXML.ElementoDoNome('ICMS').RetornaXML);
 
   
 
   
             V_ICMSCST   := DETICMSXML.ElementoDoNome('CST').Texto;                                                                              
+
             V_ICMSCST := DETICMSXML.ElementoDoNome('CST').Texto;
 
           finally
 
           finally
             DETICMSXML.Free;                                                                                                              
+
             DETICMSXML.Free;
 
           end;                         
 
           end;                         
 
                                                          
 
                                                          
Linha 60: Linha 61:
 
             DETIPIXML.LerXML(DETXML.ElementoDoNome('IPI').RetornaXML);                       
 
             DETIPIXML.LerXML(DETXML.ElementoDoNome('IPI').RetornaXML);                       
 
                
 
                
             V_IPIEnq := DETIPIXML.ElementoDoNome('cEnq').Texto;                                                            
+
             V_IPIEnq := DETIPIXML.ElementoDoNome('cEnq').Texto;
 
           finally
 
           finally
             DETIPIXML.Free;                                                                                
+
             DETIPIXML.Free;
           end;                    
+
           end;
                                                                                                           
+
         
 
           I := I + 1;
 
           I := I + 1;
 
   
 
   
Linha 75: Linha 76:
 
       CancelarTransacao;
 
       CancelarTransacao;
 
       ErroValidacao(ExceptionMessage +' Produto: '+ V_CodProduto);                                         
 
       ErroValidacao(ExceptionMessage +' Produto: '+ V_CodProduto);                                         
    end;                     
+
    end;                     
  finally
+
  finally
    ArqXML.Free;                                         
+
    ArqXML.Free;                                         
  end;                   
+
  end;                   
 
  end;
 
  end;
 
'''XML Base'''
 
<?xml version="1.0" encoding="UTF-8"?>
 
<notaFiscal>
 
  <det>
 
    <cProd>12345</cProd>
 
    <xProd>Produto A</xProd>
 
    <ICMS>
 
      <CST>00</CST>
 
      <vICMS>5.00</vICMS>
 
    </ICMS>
 
    <IPI>
 
      <cEnq>999</cEnq>
 
      <vIPI>2.50</vIPI>
 
    </IPI>
 
  </det>
 
  <det>
 
    <cProd>67890</cProd>
 
    <xProd>Produto B</xProd>
 
    <ICMS>
 
      <CST>10</CST>
 
      <vICMS>3.00</vICMS>
 
    </ICMS>
 
    <IPI>
 
      <cEnq>888</cEnq>
 
      <vIPI>1.50</vIPI>
 
    </IPI>
 
  </det>
 
</notaFiscal>
 

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;