Problema ao gerar um relatório de um determinado xml [RESOLVIDO]

1. Problema ao gerar um relatório de um determinado xml [RESOLVIDO]

Caio
caiocpg

(usa Outra)

Enviado em 09/08/2017 - 16:43h

Olá, estou com problema em gerar um relatório de um determinado xml, a minha intenção é ele procurar todas as "tags" que eu declarei na busca mas deparei que quando ele encontra a primeira linha ele já mata o processo...
Abaixo está as minhas variáveis

dtemissao=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_.xml | grep -oP "<dEmi>(.*)</dEmi>" | cut -d ">" -f 2 | cut -d "<" -f 1)
ncupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<nCFe>(.*)</nCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)
estado=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<cUF>(.*)</cUF>" | cut -d ">" -f 2 | cut -d "<" -f 1)
produto=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<xProd>(.*)</xProd>" | cut -d ">" -f 2 | cut -d "<" -f 1)
cfop=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<CFOP>(.*)</CFOP>" | cut -d ">" -f 2 | cut -d "<" -f 1)
valorcupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml.xml | grep -oP "<vCFe>(.*)</vCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)


echo **************RELATÓRIO*********************\n
echo "data emissao $dtemissao"
echo "numero do cupom $ncupom"
echo "estado $estado"
echo "nome do produto $produto"
echo "cfop $cfop"
echo "valor cupom $valorcupom


===================================Exemplo de uma xml Cupom Fiscal==========================
<?xml version="1.0"?>
<CFe>
<infCFe versaoDadosEnt="0.07">
<ide>
<CNPJ>36842905000156</CNPJ>
<signAC>TESTE SA</signAC>
<numeroCaixa>001</numeroCaixa>
</ide>
<emit>
<CNPJ>36842905000156</CNPJ>
<IE>111111111111</IE>
<IM>12345</IM>
<cRegTribISSQN>3</cRegTribISSQN>
<indRatISSQN>N</indRatISSQN>
</emit>
<dest/>
<det nItem="1">
<prod>
<cProd>116</cProd>
<cEAN>9990000001163</cEAN>
<xProd>Cascao</xProd>
<CFOP>5405</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<det nItem="2">
<prod>
<cProd>117</cProd>
<cEAN>999999999</cEAN>
<xProd>TESTE</xProd>
<CFOP>5102</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<imposto>
<ICMS>
<ICMSSN102>
<Orig>0</Orig>
<CSOSN>500</CSOSN>
</ICMSSN102>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<total/>
<pgto>
<MP>
<cMP>01</cMP>
<vMP>4.00</vMP>
</MP>
</pgto>
</infCFe>
</CFe>

Alguém tem noção de como eu posso proceder?


  


2. Re: Problema ao gerar um relatório de um determinado xml [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 09/08/2017 - 17:36h

caiocpg escreveu:

Olá, estou com problema em gerar um relatório de um determinado xml, a minha intenção é ele procurar todas as "tags" que eu declarei na busca mas deparei que quando ele encontra a primeira linha ele já mata o processo...
Abaixo está as minhas variáveis

dtemissao=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_.xml | grep -oP "<dEmi>(.*)</dEmi>" | cut -d ">" -f 2 | cut -d "<" -f 1)
ncupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<nCFe>(.*)</nCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)
estado=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<cUF>(.*)</cUF>" | cut -d ">" -f 2 | cut -d "<" -f 1)
produto=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<xProd>(.*)</xProd>" | cut -d ">" -f 2 | cut -d "<" -f 1)
cfop=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<CFOP>(.*)</CFOP>" | cut -d ">" -f 2 | cut -d "<" -f 1)
valorcupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml.xml | grep -oP "<vCFe>(.*)</vCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)


echo **************RELATÓRIO*********************\n
echo "data emissao $dtemissao"
echo "numero do cupom $ncupom"
echo "estado $estado"
echo "nome do produto $produto"
echo "cfop $cfop"
echo "valor cupom $valorcupom


===================================Exemplo de uma xml Cupom Fiscal==========================
<?xml version="1.0"?>
<CFe>
<infCFe versaoDadosEnt="0.07">
<ide>
<CNPJ>36842905000156</CNPJ>
<signAC>TESTE SA</signAC>
<numeroCaixa>001</numeroCaixa>
</ide>
<emit>
<CNPJ>36842905000156</CNPJ>
<IE>111111111111</IE>
<IM>12345</IM>
<cRegTribISSQN>3</cRegTribISSQN>
<indRatISSQN>N</indRatISSQN>
</emit>
<dest/>
<det nItem="1">
<prod>
<cProd>116</cProd>
<cEAN>9990000001163</cEAN>
<xProd>Cascao</xProd>
<CFOP>5405</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<det nItem="2">
<prod>
<cProd>117</cProd>
<cEAN>999999999</cEAN>
<xProd>TESTE</xProd>
<CFOP>5102</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<imposto>
<ICMS>
<ICMSSN102>
<Orig>0</Orig>
<CSOSN>500</CSOSN>
</ICMSSN102>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<total/>
<pgto>
<MP>
<cMP>01</cMP>
<vMP>4.00</vMP>
</MP>
</pgto>
</infCFe>
</CFe>

Alguém tem noção de como eu posso proceder?


Boa tarde Caio.
Segue:
Para "pegar" o CNPJ do "emitente", faça:
sed -n '/<emit>/,/<\/emit>/p' cfe|awk -F '[<>]' '/^<CNPJ>/{print $3}' 

36842905000156
Onde, cfe é o "Exemplo de uma xml Cupom Fiscal" que vc postou.
Poste o arquivo "minha_xml_.xml"

Att.:
marcelo oliver



3. Re: Problema ao gerar um relatório de um determinado xml [RESOLVIDO]

Caio
caiocpg

(usa Outra)

Enviado em 10/08/2017 - 09:36h

msoliver escreveu:

caiocpg escreveu:

Olá, estou com problema em gerar um relatório de um determinado xml, a minha intenção é ele procurar todas as "tags" que eu declarei na busca mas deparei que quando ele encontra a primeira linha ele já mata o processo...
Abaixo está as minhas variáveis

dtemissao=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_.xml | grep -oP "<dEmi>(.*)</dEmi>" | cut -d ">" -f 2 | cut -d "<" -f 1)
ncupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<nCFe>(.*)</nCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)
estado=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<cUF>(.*)</cUF>" | cut -d ">" -f 2 | cut -d "<" -f 1)
produto=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<xProd>(.*)</xProd>" | cut -d ">" -f 2 | cut -d "<" -f 1)
cfop=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<CFOP>(.*)</CFOP>" | cut -d ">" -f 2 | cut -d "<" -f 1)
valorcupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml.xml | grep -oP "<vCFe>(.*)</vCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)


echo **************RELATÓRIO*********************\n
echo "data emissao $dtemissao"
echo "numero do cupom $ncupom"
echo "estado $estado"
echo "nome do produto $produto"
echo "cfop $cfop"
echo "valor cupom $valorcupom


===================================Exemplo de uma xml Cupom Fiscal==========================
<?xml version="1.0"?>
<CFe>
<infCFe versaoDadosEnt="0.07">
<ide>
<CNPJ>36842905000156</CNPJ>
<signAC>TESTE SA</signAC>
<numeroCaixa>001</numeroCaixa>
</ide>
<emit>
<CNPJ>36842905000156</CNPJ>
<IE>111111111111</IE>
<IM>12345</IM>
<cRegTribISSQN>3</cRegTribISSQN>
<indRatISSQN>N</indRatISSQN>
</emit>
<dest/>
<det nItem="1">
<prod>
<cProd>116</cProd>
<cEAN>9990000001163</cEAN>
<xProd>Cascao</xProd>
<CFOP>5405</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<det nItem="2">
<prod>
<cProd>117</cProd>
<cEAN>999999999</cEAN>
<xProd>TESTE</xProd>
<CFOP>5102</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<imposto>
<ICMS>
<ICMSSN102>
<Orig>0</Orig>
<CSOSN>500</CSOSN>
</ICMSSN102>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<total/>
<pgto>
<MP>
<cMP>01</cMP>
<vMP>4.00</vMP>
</MP>
</pgto>
</infCFe>
</CFe>

Alguém tem noção de como eu posso proceder?


Boa tarde Caio.
Segue:
Para "pegar" o CNPJ do "emitente", faça:
sed -n '/<emit>/,/<\/emit>/p' cfe|awk -F '[<>]' '/^<CNPJ>/{print $3}' 

36842905000156
Onde, cfe é o "Exemplo de uma xml Cupom Fiscal" que vc postou.
Poste o arquivo "minha_xml_.xml"

Att.:
marcelo oliver


Olá marcelo oliver, fiz uma nova xml com 5 itens vou postar a minha xml no link
https://drive.google.com/open?id=0B9gkOBxlnG__TjFQZzg5dTk3RFU
e o meu script: https://drive.google.com/open?id=0B9gkOBxlnG__SHNmR2JXNzVDdVE

O problema que estou encontrando no Sed e no grep é que ele encontra a primeira tag e ignora as outras... Exemplo:
Na tag <det nItem> tem 3 itens, acompanhando assim:
<det nItem="1">
<det nItem="2">
<det nItem="3">

Na variável produto ele acha a tag <xProd>(.*)</xProd mas achei que ele iria me mostrar todas as listas que declarei...
echo "nome do produto $produto"

Tô quebrando a cabeça mas to achando que vou ter que criar um laço de repetição...


4. Re: Problema ao gerar um relatório de um determinado xml [RESOLVIDO]

Caio
caiocpg

(usa Outra)

Enviado em 10/08/2017 - 11:07h

Acho o que eu preciso é fazer uma varredura nas tags, pesquisei no google e achei a operação FOREACH, vou dar uma estudada aqui no shell script, se eu conseguir posto meu script se não conseguir posto do mesmo jeito rsrsrs


5. Re: Problema ao gerar um relatório de um determinado xml [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/08/2017 - 19:16h

caiocpg escreveu:

msoliver escreveu:

caiocpg escreveu:

Olá, estou com problema em gerar um relatório de um determinado xml, a minha intenção é ele procurar todas as "tags" que eu declarei na busca mas deparei que quando ele encontra a primeira linha ele já mata o processo...
Abaixo está as minhas variáveis

dtemissao=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_.xml | grep -oP "<dEmi>(.*)</dEmi>" | cut -d ">" -f 2 | cut -d "<" -f 1)
ncupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<nCFe>(.*)</nCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)
estado=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<cUF>(.*)</cUF>" | cut -d ">" -f 2 | cut -d "<" -f 1)
produto=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<xProd>(.*)</xProd>" | cut -d ">" -f 2 | cut -d "<" -f 1)
cfop=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<CFOP>(.*)</CFOP>" | cut -d ">" -f 2 | cut -d "<" -f 1)
valorcupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml.xml | grep -oP "<vCFe>(.*)</vCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)


echo **************RELATÓRIO*********************\n
echo "data emissao $dtemissao"
echo "numero do cupom $ncupom"
echo "estado $estado"
echo "nome do produto $produto"
echo "cfop $cfop"
echo "valor cupom $valorcupom


===================================Exemplo de uma xml Cupom Fiscal==========================
<?xml version="1.0"?>
<CFe>
<infCFe versaoDadosEnt="0.07">
<ide>
<CNPJ>36842905000156</CNPJ>
<signAC>TESTE SA</signAC>
<numeroCaixa>001</numeroCaixa>
</ide>
<emit>
<CNPJ>36842905000156</CNPJ>
<IE>111111111111</IE>
<IM>12345</IM>
<cRegTribISSQN>3</cRegTribISSQN>
<indRatISSQN>N</indRatISSQN>
</emit>
<dest/>
<det nItem="1">
<prod>
<cProd>116</cProd>
<cEAN>9990000001163</cEAN>
<xProd>Cascao</xProd>
<CFOP>5405</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<det nItem="2">
<prod>
<cProd>117</cProd>
<cEAN>999999999</cEAN>
<xProd>TESTE</xProd>
<CFOP>5102</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<imposto>
<ICMS>
<ICMSSN102>
<Orig>0</Orig>
<CSOSN>500</CSOSN>
</ICMSSN102>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<total/>
<pgto>
<MP>
<cMP>01</cMP>
<vMP>4.00</vMP>
</MP>
</pgto>
</infCFe>
</CFe>

Alguém tem noção de como eu posso proceder?


Boa tarde Caio.
Segue:
Para "pegar" o CNPJ do "emitente", faça:
sed -n '/<emit>/,/<\/emit>/p' cfe|awk -F '[<>]' '/^<CNPJ>/{print $3}' 

36842905000156
Onde, cfe é o "Exemplo de uma xml Cupom Fiscal" que vc postou.
Poste o arquivo "minha_xml_.xml"

Att.:
marcelo oliver


Olá marcelo oliver, fiz uma nova xml com 5 itens vou postar a minha xml no link
https://drive.google.com/open?id=0B9gkOBxlnG__TjFQZzg5dTk3RFU
e o meu script: https://drive.google.com/open?id=0B9gkOBxlnG__SHNmR2JXNzVDdVE

O problema que estou encontrando no Sed e no grep é que ele encontra a primeira tag e ignora as outras... Exemplo:
Na tag <det nItem> tem 3 itens, acompanhando assim:
<det nItem="1">
<det nItem="2">
<det nItem="3">

Na variável produto ele acha a tag <xProd>(.*)</xProd mas achei que ele iria me mostrar todas as listas que declarei...
echo "nome do produto $produto"

Tô quebrando a cabeça mas to achando que vou ter que criar um laço de repetição...


Boa noite Caio, testei aqui e funcionou . . .
O 1º passo é "verticalizar" o arquivo.
sed 's/></>\n</g' minha_xml.xml > NFe.xml 

Feito isso, atribua o valor para as variáveis.
dtem=$(awk -F '[<>]' '/^<dEmi>/{print $3}' NFe.xml)
ncup=$(awk -F '[<>]' '/^<nCFe>/{print $3}' NFe.xml)
estado=$(awk -F '[<>]' '/^<cUF>/{print $3}' NFe.xml)
prod=$(awk -F '[<>]' '/^<xProd>/{print $3}' NFe.xml)
cfop=$(awk -F '[<>]' '/^<CFOP>/{print $3}' NFe.xml)
valor=$(awk -F '[<>]' '/^<vCFe>/{print $3}' NFe.xml)
IMPRIMINDO
echo -e "**************RELATÓRIO*********************\nData: $dtem\nNº Cupom: $ncup\nEstado: $estado"
echo "$prod"
echo "$cfop"
echo "$valor"

É isso, aguardo o retorno . . .

Att.:
Marcelo Oliver



6. Re: Problema ao gerar um relatório de um determinado xml [RESOLVIDO]

Caio
caiocpg

(usa Outra)

Enviado em 19/08/2017 - 09:17h

msoliver escreveu:

caiocpg escreveu:

msoliver escreveu:

caiocpg escreveu:

Olá, estou com problema em gerar um relatório de um determinado xml, a minha intenção é ele procurar todas as "tags" que eu declarei na busca mas deparei que quando ele encontra a primeira linha ele já mata o processo...
Abaixo está as minhas variáveis

dtemissao=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_.xml | grep -oP "<dEmi>(.*)</dEmi>" | cut -d ">" -f 2 | cut -d "<" -f 1)
ncupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<nCFe>(.*)</nCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)
estado=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<cUF>(.*)</cUF>" | cut -d ">" -f 2 | cut -d "<" -f 1)
produto=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<xProd>(.*)</xProd>" | cut -d ">" -f 2 | cut -d "<" -f 1)
cfop=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml_ | grep -oP "<CFOP>(.*)</CFOP>" | cut -d ">" -f 2 | cut -d "<" -f 1)
valorcupom=$(sed -n '/<CFe>/,/<\/Cfe>/p' minha_xml.xml | grep -oP "<vCFe>(.*)</vCFe>" | cut -d ">" -f 2 | cut -d "<" -f 1)


echo **************RELATÓRIO*********************\n
echo "data emissao $dtemissao"
echo "numero do cupom $ncupom"
echo "estado $estado"
echo "nome do produto $produto"
echo "cfop $cfop"
echo "valor cupom $valorcupom


===================================Exemplo de uma xml Cupom Fiscal==========================
<?xml version="1.0"?>
<CFe>
<infCFe versaoDadosEnt="0.07">
<ide>
<CNPJ>36842905000156</CNPJ>
<signAC>TESTE SA</signAC>
<numeroCaixa>001</numeroCaixa>
</ide>
<emit>
<CNPJ>36842905000156</CNPJ>
<IE>111111111111</IE>
<IM>12345</IM>
<cRegTribISSQN>3</cRegTribISSQN>
<indRatISSQN>N</indRatISSQN>
</emit>
<dest/>
<det nItem="1">
<prod>
<cProd>116</cProd>
<cEAN>9990000001163</cEAN>
<xProd>Cascao</xProd>
<CFOP>5405</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<det nItem="2">
<prod>
<cProd>117</cProd>
<cEAN>999999999</cEAN>
<xProd>TESTE</xProd>
<CFOP>5102</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>4.00</vUnCom>
<indRegra>A</indRegra>
</prod>
<imposto>
<ICMS>
<ICMSSN102>
<Orig>0</Orig>
<CSOSN>500</CSOSN>
</ICMSSN102>
</ICMS>
<PIS>
<PISSN>
<CST>49</CST>
</PISSN>
</PIS>
<COFINS>
<COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
<total/>
<pgto>
<MP>
<cMP>01</cMP>
<vMP>4.00</vMP>
</MP>
</pgto>
</infCFe>
</CFe>

Alguém tem noção de como eu posso proceder?


Boa tarde Caio.
Segue:
Para "pegar" o CNPJ do "emitente", faça:
sed -n '/<emit>/,/<\/emit>/p' cfe|awk -F '[<>]' '/^<CNPJ>/{print $3}' 

36842905000156
Onde, cfe é o "Exemplo de uma xml Cupom Fiscal" que vc postou.
Poste o arquivo "minha_xml_.xml"

Att.:
marcelo oliver


Olá marcelo oliver, fiz uma nova xml com 5 itens vou postar a minha xml no link
https://drive.google.com/open?id=0B9gkOBxlnG__TjFQZzg5dTk3RFU
e o meu script: https://drive.google.com/open?id=0B9gkOBxlnG__SHNmR2JXNzVDdVE

O problema que estou encontrando no Sed e no grep é que ele encontra a primeira tag e ignora as outras... Exemplo:
Na tag <det nItem> tem 3 itens, acompanhando assim:
<det nItem="1">
<det nItem="2">
<det nItem="3">

Na variável produto ele acha a tag <xProd>(.*)</xProd mas achei que ele iria me mostrar todas as listas que declarei...
echo "nome do produto $produto"

Tô quebrando a cabeça mas to achando que vou ter que criar um laço de repetição...


Boa noite Caio, testei aqui e funcionou . . .
O 1º passo é "verticalizar" o arquivo.
sed 's/></>\n</g' minha_xml.xml > NFe.xml 

Feito isso, atribua o valor para as variáveis.
dtem=$(awk -F '[<>]' '/^<dEmi>/{print $3}' NFe.xml)
ncup=$(awk -F '[<>]' '/^<nCFe>/{print $3}' NFe.xml)
estado=$(awk -F '[<>]' '/^<cUF>/{print $3}' NFe.xml)
prod=$(awk -F '[<>]' '/^<xProd>/{print $3}' NFe.xml)
cfop=$(awk -F '[<>]' '/^<CFOP>/{print $3}' NFe.xml)
valor=$(awk -F '[<>]' '/^<vCFe>/{print $3}' NFe.xml)
IMPRIMINDO
echo -e "**************RELATÓRIO*********************\nData: $dtem\nNº Cupom: $ncup\nEstado: $estado"
echo "$prod"
echo "$cfop"
echo "$valor"

É isso, aguardo o retorno . . .

Att.:
Marcelo Oliver


Olá Marcelo, desculpe a demora... Correria do serviço não tive tempo para responder... deu certo, putz cara o negócio era verticalizar e agora tudo bate, agora eu só vou estruturar os tributos nos respectivos produtos para gerar um relatório melhor, feito isto eu já posto se deu certo. Muito obrigado mesmo!


7. Quase lá...

Caio
caiocpg

(usa Outra)

Enviado em 30/08/2017 - 10:19h

Olá, Consegui fazer alguns esquemas:
1) conforme o marcelo eu vericalizei a minha xml: sed 's/></>\n</g' minha_xml.xml > NFe.xml
2) depois separei as buscas em cada tag e joguei em um arquivo:
3) pelo comando "paste" consegui unificar os arquivos quebrados em uma só e depois dei um "cat" para printar na tela
4) segue o meu script abaixo:

#!/bin/bash
dtem=$(awk -F '[<>]' '/^<dEmi>/{print $3}' /arquivos/NFe.xml)
ncup=$(awk -F '[<>]' '/^<nCFe>/{print $3}' /arquivos/NFe.xml)
estado=$(awk -F '[<>]' '/^<cUF>/{print $3}' /arquivos/NFe.xml)
prod=$(awk -F '[<>]' '/^<xProd>/{print $3}' /arquivos/NFe.xml)
cfop=$(awk -F '[<>]' '/^<CFOP>/{print $3}' /arquivos/NFe.xml)
valor=$(awk -F '[<>]' '/^<vCFe>/{print $3}' /arquivos/NFe.xml)
clear
echo -e "data cupom:$dtem" > datacupom
echo -e "numero do cupom: $ncup" > numerocupom
echo -e "estado: $estado" > estado
echo -e "$prod" > produto
echo -e "$cfop" > cfop
echo -e "valor total: $valor" > valor_total
paste -d' ' datacupom numerocupom estado | paste -d'\n|' - produto cfop | paste -d' ' - valor_total > sincronizado
cat /arquivos/sincronizado

Eu não sei porque mas o valor_total sai na primeira linha: Segue o print:

data cupom:20170722 numero do cupom: 000067 estado: 35 valor total: 92.00
COMANDO VALVULA TITAN 99 PREP|5405

JCOMANDO VALVULA TITAN 99 PREP|5405

RETENTOR MESA MAGNETO TITAN/C|5405

Sinceramente o relatório eu gostaria de estruturar isto como uma coluna:
ex:
data cupom:20170722 numero do cupom: 000067 estado: 35
Descricao do produto: CFOP
COMANDO VALVULA TITAN 99 PREP 5405
COMANDO VALVULA TITAN 99 PREP 5405

valor total: 92.00


8. Re: Problema ao gerar um relatório de um determinado xml

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 30/08/2017 - 19:57h

caiocpg escreveu:

Olá, Consegui fazer alguns esquemas:
1) conforme o marcelo eu vericalizei a minha xml: sed 's/></>\n</g' minha_xml.xml > NFe.xml
2) depois separei as buscas em cada tag e joguei em um arquivo:
3) pelo comando "paste" consegui unificar os arquivos quebrados em uma só e depois dei um "cat" para printar na tela
4) segue o meu script abaixo:

#!/bin/bash
dtem=$(awk -F '[<>]' '/^<dEmi>/{print $3}' /arquivos/NFe.xml)
ncup=$(awk -F '[<>]' '/^<nCFe>/{print $3}' /arquivos/NFe.xml)
estado=$(awk -F '[<>]' '/^<cUF>/{print $3}' /arquivos/NFe.xml)
prod=$(awk -F '[<>]' '/^<xProd>/{print $3}' /arquivos/NFe.xml)
cfop=$(awk -F '[<>]' '/^<CFOP>/{print $3}' /arquivos/NFe.xml)
valor=$(awk -F '[<>]' '/^<vCFe>/{print $3}' /arquivos/NFe.xml)
clear
echo -e "data cupom:$dtem" > datacupom
echo -e "numero do cupom: $ncup" > numerocupom
echo -e "estado: $estado" > estado
echo -e "$prod" > produto
echo -e "$cfop" > cfop
echo -e "valor total: $valor" > valor_total
paste -d' ' datacupom numerocupom estado | paste -d'\n|' - produto cfop | paste -d' ' - valor_total > sincronizado
cat /arquivos/sincronizado

Eu não sei porque mas o valor_total sai na primeira linha: Segue o print:

data cupom:20170722 numero do cupom: 000067 estado: 35 valor total: 92.00
COMANDO VALVULA TITAN 99 PREP|5405

JCOMANDO VALVULA TITAN 99 PREP|5405

RETENTOR MESA MAGNETO TITAN/C|5405

Sinceramente o relatório eu gostaria de estruturar isto como uma coluna:
ex:
data cupom:20170722 numero do cupom: 000067 estado: 35
Descricao do produto: CFOP
COMANDO VALVULA TITAN 99 PREP 5405
COMANDO VALVULA TITAN 99 PREP 5405
valor total: 92.00


Caio, na boa....
Para que complicar o "baguio"???
Vc tem as variáveis, coloca cada uma em um arquivo, faz um sarau com o paste . . . . . Gera mais um arquivo . . . .
Faça o seguinte:
echo -n "data cupom:$dtem numero do cupom: $ncup estado: $estado" 
echo -e "\nDescrição do produto:\t\t\t\tCFOP\n$prod"

E por ai vai . . .

MSO




9. Quase lá

Caio
caiocpg

(usa Outra)

Enviado em 01/09/2017 - 17:21h

msoliver obrigado pela resposta, tentei este comando mas não tive tanto sucesso... Mas... Usei alguns comandos seu, a única coisa que precisei fazer é colocar paste -d' um embaixo do outro e não com o "Pipe", o por quê não sei mas só sei que deu certo!

#!/bin/bash
dtem=$(awk -F '[<>]' '/^<dEmi>/{print $3}' /arquivos/NFe.xml)
ncup=$(awk -F '[<>]' '/^<nCFe>/{print $3}' /arquivos/NFe.xml)
estado=$(awk -F '[<>]' '/^<cUF>/{print $3}' /arquivos/NFe.xml)
prod=$(awk -F '[<>]' '/^<xProd>/{print $3}' /arquivos/NFe.xml)
cfop=$(awk -F '[<>]' '/^<CFOP>/{print $3}' /arquivos/NFe.xml)
valor_item=$(awk -F '[<>]' '/^<vProd>/{print $3}' /arquivos/NFe.xml)
valor_total=$(awk -F '[<>]' '/^<vCFe>/{print $3}' /arquivos/NFe.xml)

clear
echo -e "data cupom:$dtem|" > datacupom
echo -e "numero do cupom: $ncup|" > numerocupom
echo -e "estado: $estado|" > estado
echo -e "$prod" > produto
echo -e "$valor_item" > valor_item
echo -e "$cfop" > cfop
echo -e "valor total: $valor_total" > valor_total
paste -d' ' datacupom numerocupom estado
echo -e "\t"
echo -e "DESCRICAO PRODUTO:\t CFOP:"
paste -d' ' produto cfop
paste -d' ' valor_total
echo "*********************************************"


Printando o script:

data cupom:20170722| numero do cupom: 000067| estado: 35|

DESCRICAO PRODUTO: CFOP:
COMANDO VALVULA TITAN 99 PREP 5405
JOGO JUNTA TITAN 95/99/TODAY/ 5405
RETENTOR MESA MAGNETO TITAN/C 5405
valor total: 92.00
*********************************************

No terminal linux fica mais bonito rsrs....

Bom, talvez pode ter um caminho mais fácil mas este foi o melhor caminho que encontrei... Mas vou muito além, agora vou tentar pegar todas xml e fazer a importação, claro que preciso implementar o meu código, por enquanto vou deixar em aberto e assim que eu conseguir eu já posto para vocês! Desde já eu agradeço a cooperação de todos vocês! muito obrigado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts