--- Em [email protected], "Cristiano" <boxferr...@...> escreveu
>
> Salve ilustres, boa tarde.
> 
> Estou montando um script para extrair dados de um arquivo XML (nota fiscal 
> eletronica).
> 
(...)
> O problema é que esta regex casa com todo o conteúdo da primeira tag <cProd> 
> até a última tag </cProd>, retornando do código do primeiro produto e até o 
> último (NNN).
> 
> Tenho 2 dúvidas:
> 
> 1) O que posso colocar no lugar do '.*' para fazer ele pegar apenas o 
> primeiro campo "cProd", parando na primeira tag </cProd> que encontrar?
> 
> 2) Uando esta regex, como posso criar um laço para extrair todos os campos 
> cProd do arquivo (pode vir com as tags junto, que eu me viro em removê-las)? 
> Algo que me dê o seguinte resultado:
> 
> # extrai_codigo.sh nome_do_arquivo.xml
> nome_do_arquivo.xml:501
> nome_do_arquivo.xml:502
> nome_do_arquivo.xml:503
> 
> Minha necessidade é pegar um diretório com N (leia-se trocentos) arquivos XML 
> e saber quais os códigos de produto em cada um deles.



UPDATE:

Consegui pegar apenas o conteúdo do primero campo, mas usando o sed. 
Entretanto, ainda tenho interesse e melhorar a regex, a título de aprendizado.

Fiz assim:

http://pastebin.com/f5190fbf5

O problema do laço, ainda não sei como resolver.

E, mesmo esta solução com sed não está perfeita.

Não sei por que razão, não está retornando apenas o resultado do sed.

Veja o conteúdo do XML:

http://pastebin.com/f7252436a

Notem que todas as informações que me interessam (os campos cProd) estão todos 
na primeira linha do arquivo. Porém, mesmo apesar do '-n', o conteúdo da 2.ª 
linha em diante é exibido inteiro.

Veja o resultado:

http://pastebin.com/f8ada9bb

Notem que na linha em destaque o sed retornou o conteúdo correto do primeiro 
campo cProd, mas também exibiu o conteúdo da linha 2 em diante.

Onde está a caca?




Responder a