xml: copiar sequência de texto de um elemento para outro? [fechadas]

1

obrigado por ajudar. Eu não sou um programador, mas eu entendo princípios básicos. Eu preciso fazer isso em um monte de arquivos xml. Eu estou certo xpath pl ou xtask ou alguma combinação usando regex, poderia conseguir isso, mas eu estou perdido. Alguém tem alguma idéia? obrigado!

Aqui está o escopo:

Copie o elemento "scc_title" para o elemento "scc_comments". O elemento scc_comments geralmente está vazio. se não for, ainda preciso anexá-lo ao conteúdo atual.

<property name="scc_title" type="s">NEED TO COPY THIS TEXT</property>

<property name="scc_comments" type="s">AND PASTE IT HERE</property>
    
por user252328 25.02.2014 / 23:09

2 respostas

2

Uma maneira alternativa com python e ElementTree :

from __future__ import print_function
import sys 
import xml.etree.ElementTree as ET

def main():
  if len(sys.argv) < 3:
    print("usage:", sys.argv[0], "input", "output")
    sys.exit(1)
  tree = ET.parse(sys.argv[1])
  root = tree.getroot();
  src = root.find(".//*[@name='scc_title']")
  dst = root.find(".//*[@name='scc_comments']")
  if src is not None and dst is not None:
    dst.text += src.text
    tree.write(sys.argv[2])
  else:
    if src is None:
      print("Failed to find 'scc_title' attribute", file=sys.stderr)
    if dst is None:
      print("Failed to find 'scc_comments' attribute", file=sys.stderr)
    sys.exit(1)

if __name__ == "__main__":
  main()
    
por Jason Conti 26.02.2014 / 00:37
1

Pythonic non xml way assumindo que scc_title vem antes de scc_comments E cada tag tem sua própria linha E que todos os arquivos XML estão no mesmo diretório Eu não testei isso , mas esse é o ideia básica. Além disso, não tenho certeza se existe uma maneira rápida de usar a interface gráfica, e eu também não sou um programador, então provavelmente há uma maneira melhor de fazer isso com os módulos xml:

#put this in the directory with the xml files
import re
import os

#for file_name in current directory "."
for file_name in os.listdir("."):

    if ".xml" in file_name:
        outfile = open("edited_"+file_name,"w+")

        with open(file_name,'r') as f:
            for line in f:

                if "scc_title" in line:
                    #split the string by two delimeters "<" and ">" and get the 3rd element starts at 0
                    scc_title_value = re.split('<|>',line)[2]

                if "scc_comments" in line:
                    scc_comments_value = re.split('<|>',line)[2]
                    #replace scc_comments_value with scc_title_value
                    line = line.replace(scc_comments_value,scc_title_value)

                outfile.write(line)
    
por jmunsch 26.02.2014 / 00:32

Tags