xml.etree.ElementTree вставка в дочерний узел создания бесконечного цикла Python - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь вставить элемент в определенный дочерний узел дочернего узла в большой документ XML (~ 2000 строк), ниже мой код:

import xml.etree.cElementTree as ET
class Kapow_commands:
    tree = ET.parse('location/of/xml/file')
    root = tree.getroot()
    seq_id = 39

    def __init__(self):
        pass

    def append(self, block):
        node_num=0 
        for node in Kapow_commands.root[13][1]:
            node_num=node_num+1
            if node.get('class') == 'End':
                node.attrib['id'] = str(Kapow_commands.seq_id + 1)
                print(node.attrib)
                print(node_num)
                Kapow_commands.root[13][1].insert(node_num -1, block)


block = ET.Element("test")    

Kapow_commands().append(block)

этот код сканирует файл XML по адресуопределенный узел для class = 'End', затем он добавляет 1 к этому идентификатору элемента и вставляет другой элемент перед ним.Однако, когда я запускаю это, создается впечатление, что создается бесконечный цикл, поскольку он не останавливает вставку элементов в этой позиции.У кого-нибудь есть идеи, почему это может происходить?Или есть идеи, как правильно вставить этот элемент в нужную позицию?

1 Ответ

0 голосов
/ 25 марта 2019

У меня была похожая проблема.

Решением было поместить инициализацию элемента, который вы хотите добавить в цикл.

Так что в вашем случае я бы передал имя какаргумент и код должен выглядеть следующим образом:

def append(self, blockName): # here comes the name
    node_num=0 
    for node in Kapow_commands.root[13][1]:
        block = ET.Element(name) # and there goes the init
        node_num=node_num+1
        if node.get('class') == 'End':
            node.attrib['id'] = str(Kapow_commands.seq_id + 1)
            print(node.attrib)
            print(node_num)
            Kapow_commands.root[13][1].insert(node_num -1, block)

Для меня это сработало.К сожалению, я не знаю причину этого волшебства.

...