Atributo nó Raiz For Xml

11/01/2016

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>

Riechelmann

Respostas

11/01/2016

Riechelmann

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 Citar