XML 2.0 NF-e (xmlForest x xmlElement)

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
bertosro
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 18 Ago 2006 11:13 am
Localização: São Paulo - SP
Bertosro
MSN / TALK - roberto.fernandes@gmail.com

Olá mestres boa tarde.
Estou precisando muito ajuda de vocês.

É o seguinte estou criando uma rotina para geração do XML para emissão de nota fiscal eletrônica e oue esta pegando é que não estou conseguindo criar uma regra para os fechamentos das TAGS na geração do XML

Preciso gerar um XML igual a este:

Selecionar tudo

<infNFe versao="2.0">
  <tag2>
    <tagB>2010-11-17</tagB>
  </tag2>
  <tag3/>
  <teste>
    <cESPECIE>2010-11-17</cESPECIE>
    <nomeImpressora>2010-11-17</nomeImpressora>
    <cMunFG>2010-11-17</cMunFG>
  </teste>    
</infNFe>        
Estou utilizando o seguinte SQL:

Selecionar tudo

SELECT xmlElement("infNFe",xmlAttributes('2.0' as "versao"),
                                  xmlelement
                                  ("tag1",null,  
                                    xmlForest (null         as "tagA") 
                                  as "sumir"
                                  ),
                                  xmlelement
                                  ("tag2",null,  
                                    xmlForest (SYSDATE      as "tagB") 
                                  as "normal"
                                  ),                                  
                                  xmlelement
                                  ("tag3",null,  
                                    xmlForest (null         as "tagC") 
                                  as "empy"
                                  ),      
                                  xmlForest 
                                  (  
                                   SYSDATE         as "cESPECIE",     
                                   SYSDATE         as "nomeImpressora",     
                                   SYSDATE         as "cMunFG"  
                                 ) AS "teste"                        
                                )"infNFe"--/
                                FROM DUAL a 

E estou obtendo e sguinte resultado:

Selecionar tudo

<infNFe versao="2.0">
  <tag1/>
  <tag2>
    <tagB>2010-11-17</tagB>
  </tag2>
  <tag3/>
  <cESPECIE>2010-11-17</cESPECIE>
  <nomeImpressora>2010-11-17</nomeImpressora>
  <cMunFG>2010-11-17</cMunFG>
</infNFe>
O problema é que tenho casos onde a tg pode estar vazia e preciso retorna-la assim: <tag/> e na maioria dos casos preciso ocultar a TAG.
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Não entendi bem o que você precisa.

De repente daria para você postar um exemplo de XML (bem pequeno, só para ilustrar o problema), mostrando o que você está obtendo e o que você quer obter dele, com uma explicaçãozinha?
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Desculpa, agora que vi lá no alto o xml. Vou dar uma olhada. :roll:
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Nova pergunta: você não está obtendo esses dados para gerar o XML de uma tabela no Oracle? Daria para postar a estrutura da(s) tabela(s) e umas linhas dela(s)? Estrutura simplificada e uns dados de exemplo, só com as coluna que você quer nesse exemplo.
thiago_r_f
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Qui, 17 Abr 2008 4:02 pm
Localização: Rio de Janeiro - RJ
O Backup é meu pastor e nada me faltará!
Thiago Rodrigues de Farias

A última xmlForest não deveria estar dentro de um xmlElement?
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Outra coisa? Qual a versão do seu Oracle? Teria alternativas à XMLforest nas versões mais recentes, 10g para cima.
bertosro
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 18 Ago 2006 11:13 am
Localização: São Paulo - SP
Bertosro
MSN / TALK - roberto.fernandes@gmail.com

Olá Boa tarde mestres.
É o seguinte estou executando o select abaixo para montar um XML, vejam:

Selecionar tudo

SELECT
  XMLAGG(decode('S','S',                                       
      xmlelement("infAdic",null,                                                
          xmlForest --/ infAdic E-z01/P-A01                                      
          (                                                                       
           'a.infadic_infadfisco'  as "infAdFisco",    
           'a.infadic_infcpl'      as "infCpl",
            xmlForest --/ obsCont E-Z04/P-Z01                                        
            (                                                                         
             'RECOPI'       as "xCampo" ,         
             '20101122209600651275'      as "xTexto"            
            ) "obsCont" --/ obsCont E-Z04/P-Z01          
          ) as "infAdic"                                                         
      )                                                                         
  )) "xml"--/ infAdic E-z01/P-A01   
 FROM DUAL a
Executando o select acima tenho o seguinte retorno:

Selecionar tudo

<infAdic>
  <infAdFisco>a.infadic_infadfisco</infAdFisco>
  <infCpl>a.infadic_infcpl</infCpl>
  <obsCont>
    <xCampo>RECOPI</xCampo>
    <xTexto>20101122209600651275</xTexto>
  </obsCont>
</infAdic>
Mas na verdade estou precisando gerar um XML dessa maneira:

Selecionar tudo

<infAdic> 
  <infAdFisco>a.infadic_infadfisco</infAdFisco> 
  <infCpl>a.infadic_infcpl</infCpl> 
	<obsCont xCampo="RECOPI">
		<xTexto>20101122209600651275</xTexto>
	</obsCont>
</infAdic>  
Por favor alguém pode me dar uma luz?
rafaelfrocha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Qua, 31 Out 2007 9:30 am
Localização: Uberlândia
Rafael Rocha

Tenta assim amigo:

Selecionar tudo

SELECT XMLELEMENT ("infAdic",
          XMLFOREST('a.infadic_infadfisco'  AS "infAdFisco"
                   ,'a.infadic_infcpl'      AS "infCpl"
                   ),
          XMLELEMENT("obsCont", XMLAttributes('xCampo="RECOPI"' as "xCampo"), XMLELEMENT("xTexto", '20101122209600651275') 
                    )         
       )XML
  FROM DUAL
/  
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes