Substituir dados de valores em vários arquivos xml

0

Eu tenho muitos arquivos xml com uma estrutura específica, por exemplo

<Class="Object">
    <Speed>25</Name>
    <Price>3</Price>

Eu quero substituir os valores de campos específicos. Eu posso fazer isso manualmente, mas vai demorar muito tempo.

Por exemplo: preciso definir Velocidade como 100 e Preço como 50 em todos os arquivos.

O que eu faço agora é abrir cada arquivo, procurar por Speed e, em seguida, digitar 50 e assim por diante. Demora muito tempo, então eu gostaria de saber se há uma maneira de fazê-lo automaticamente via Notepad ++ ou outro software.

Obrigado antecipadamente!

    
por Mike 25.12.2017 / 23:10

3 respostas

0

Você pode experimentar o Python3.x para essa finalidade. Eu usei o Python como ele está disponível em muitas plataformas. Eu testei esse script no Windows e no Ubuntu. Eu não observei nenhum problema. Este trecho altera apenas os valores de Velocidade , mas sinta-se à vontade para modificar a variável replace_what de modo que ela mude qualquer que seja sua necessidade.

import os
import re
my_dir = 'C:\temp2\my_folder\'
replace_what = '(?<=<Speed>)(\d+)(?=<)'
replace_with = '100'
# loop through all files in directory
for fn in os.listdir(my_dir):
    #print(fn)
    pathfn = os.path.join(my_dir,fn)
    if os.path.isfile(pathfn):
        file = open(pathfn, 'r+')
        new_file_content=''
        for line in file:
            p = re.compile(replace_what)
            new_file_content += p.sub(replace_with, line)
        file.seek(0)
        file.truncate()
        file.write(new_file_content)
        file.close()
    
por 28.12.2017 / 10:37
0

Aqui está a versão recursiva do script. Ele modifica os valores em arquivos no diretório fornecido e em todos os seus subdiretórios.

import os
import re
my_dir = 'C:\temp2\my_folder\'
replace_what = '(?<=<Speed>)(\d+)(?=<)'
replace_with = '100'
# loop through all files in directory recursively
for root, directories, filenames in os.walk(my_dir):
    for filename in filenames:
        if os.path.isfile(os.path.join(root,filename)):
            file = open(os.path.join(root,filename), 'r+')
            new_file_content=''
            for line in file:
                p = re.compile(replace_what)
                new_file_content += p.sub(replace_with, line)
            file.seek(0)
            file.truncate()
            file.write(new_file_content)
            file.close()
    
por 31.12.2017 / 00:17
0

Suponho que haja um erro de digitação no seu exemplo e você tenha <Speed>25</Speed>

  • Ctrl + F
  • Encontre o que: (?<=<Speed>)\d+(?=</Speed>)
  • Substituir por: 100
  • check Embrulhe
  • verificar expressão regular
  • Substituir todos

Explicação:

(?<=<Speed>)    : lookbehind, zero-length assertion to make sure we have "<Speed>" before current position
\d+             : 1 or more digits
(?=</Speed>)    : lookahead, zero-length assertion to make sure we have "</Speed>" after current position

Substituição:

100 : the new speed value

Faça o mesmo com o preço, apenas substitua Speed por Price nas instruções acima.

    
por 31.12.2017 / 12:43