Atributo nó Raiz For Xml

11/01/2016

0

Boa Tarde

Estou querendo colocar um atributo no nó raiz do xml, usando o for xml, sei como faz em uma tag simples como segue no exemplo, porém não estou conseguindo no nó raiz.
Estou tentando evitar usar um replace no nó Raiz para colocar manualmente o atributo.
Query que monta o Xml
select top 5
       'atrVenda' as [venda/@Atributo],
       a.venda as 'venda',
	   a.loja  as 'loja',
	   a.caixa as 'caixa'
  from vendas a with(nolock)
  for xml path('Venda'),root('Vendas')

Xml de Resultado
<Vendas>
  <Venda>
    <venda Atributo="atrVenda">1</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
  <Venda>
    <venda Atributo="atrVenda">2</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
  <Venda>
    <venda Atributo="atrVenda">3</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
  <Venda>
    <venda Atributo="atrVenda">4</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
  <Venda>
    <venda Atributo="atrVenda">5</venda>
    <loja>1</loja>
    <caixa>1</caixa>
  </Venda>
</Vendas>
Lucas Ramos

Lucas Ramos

Responder

Posts

11/01/2016

Lucas Ramos

Consegui fazer mas não na query acima, mas na implementação que eu precisava.
Vou deixar a implementação para quem tiver dúvidas com o For XML um bom exemplo.

select top 5
       '1.0' as [@Versao],
       'atrVenda' as [venda/@Atributo],
       a.venda as 'venda',
	   a.loja  as 'loja',
	   a.caixa as 'caixa'
  from vendas a with(nolock)
  for xml path('venda'), root('Vendas'), elements


Implementaçaõ para o PAF ECF para Envio dos Dados Redução Z
select '1.0' as '@Versao',
       (select dbo.SO_NUMERO(x.INSCRICAO_ESTADUAL) as 'Ie',
               dbo.SO_NUMERO(x.INSCRICAO_FEDERAL)  as 'Cnpj',
	           x.RAZAO_SOCIAL                      as 'NomeEmpresarial'
          from parametros x
          for xml path(''), TYPE) as 'Estabelecimento',
	   (SELECT dbo.SO_NUMERO(y.PAFECF_NUMERO_CREDENCIAMENTO_UF) as 'NumeroCredenciamento',
               y.PAFECF_NOME_COMERCIAL                          as 'NomeComercial',
	           y.VERSAO                                         as 'Versao',
	           dbo.SO_NUMERO(y.PAFECF_CNPJ_DESENVOLVEDOR)       as 'CnpjDesenvolvedor',
	           y.PAFECF_NOME_EMPRESARIAL                        as 'NomeEmpresarialDesenvolvedor'
          FROM PARAMETROS y
          for xml path(''), TYPE) as 'PafEcf', 
       (select a.ECF_FABRICACAO as 'NumeroFabricacao',
	           a.ECf_tipo       as 'Tipo',
	           a.ecf_marca      as 'Marca',
	           a.ecf_modelo     as 'Modelo',
	           a.ECF_VERSAOSB   as 'Versao',
			   (select convert(varchar(10),a.movimento,103)       as 'DataReferencia',
                       a.ECF_CRZ                                  as 'CRZ',
	                   a.ecf_coo                                  as 'COO',
	                   a.ecf_Cro                                  as 'CRO',
	                   convert(numeric(15,0),a.VENDA_BRUTA * 100) as 'VendaBrutaDiaria',
	                   convert(numeric(15,0),a.GT_FINAL * 100)    as 'GT',
					   (select x.TOTALIZADOR_PARCIAL                         as 'Nome',
                               convert(numeric(15,0),x.VALOR_ACUMULADO * 100)as 'Valor'
                          from REDUCOES_DETALHES x with(nolock)
                         where x.REDUCAO = a.REDUCAO
                           and x.VALOR_ACUMULADO > 0
					       for xml path('TotalizadorParcial'), TYPE) as 'TotalizadoresParciais'
				   for xml path(''), TYPE) as 'DadosReducaoZ'
	       for xml path(''), TYPE) as 'Ecf'
  from reducoes a with(nolock)
 where a.reducao = 46
  for xml path('ReducaoZ')


Resultado Xml quase completo o arquivo
<ReducaoZ Versao="1.0">
  <Estabelecimento>
    <Ie>123456789</Ie>
    <Cnpj>123456789</Cnpj>
    <NomeEmpresarial>Empresa Teste</NomeEmpresarial>
  </Estabelecimento>
  <PafEcf>
    <NumeroCredenciamento>123456</NumeroCredenciamento>
    <NomeComercial>AppTEste</NomeComercial>
    <Versao>1.0.0.0</Versao>
    <CnpjDesenvolvedor>123456789</CnpjDesenvolvedor>
    <NomeEmpresarialDesenvolvedor>Empresa Teste</NomeEmpresarialDesenvolvedor>
  </PafEcf>
  <Ecf>
    <NumeroFabricacao>BM123132132132131</NumeroFabricacao>
    <Tipo>ECF-IF </Tipo>
    <Marca>BEMATECH</Marca>
    <Modelo>MP-2100 TH FI</Modelo>
    <Versao>010101</Versao>
    <DadosReducaoZ>
      <DataReferencia>28/12/2015</DataReferencia>
      <CRZ>0289</CRZ>
      <COO>008078</COO>
      <CRO>0041</CRO>
      <VendaBrutaDiaria>40710</VendaBrutaDiaria>
      <GT>75351864</GT>
      <TotalizadoresParciais>
        <TotalizadorParcial>
          <Nome>Can-T</Nome>
          <Valor>3000</Valor>
        </TotalizadorParcial>
        <TotalizadorParcial>
          <Nome>DT</Nome>
          <Valor>1927</Valor>
        </TotalizadorParcial>
        <TotalizadorParcial>
          <Nome>F1</Nome>
          <Valor>35783</Valor>
        </TotalizadorParcial>
        <TotalizadorParcial>
          <Nome>OPNF</Nome>
          <Valor>11000</Valor>
        </TotalizadorParcial>
      </TotalizadoresParciais>
    </DadosReducaoZ>
  </Ecf>
</ReducaoZ>
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar