Вставить элементы в XML-код в правильном порядке/последовательности? Код PythonPython

Программы на Python
Ответить
Anonymous
 Вставить элементы в XML-код в правильном порядке/последовательности? Код Python

Сообщение Anonymous »

Я новичок в Python и пытаюсь создать сценарий, который откроет файл XML и вставит элемент XML в нужное место в последовательности элементов XML.
Итак далеко, у меня есть этот код:

Код: Выделить всё

import os
import xml.etree.ElementTree as ET

def process_xml_files(source_dir, target_dir):
# Create the target directory if it doesn't exist
if not os.path.exists(target_dir):
os.makedirs(target_dir)

# Iterate through all files in the source directory
for filename in os.listdir(source_dir):
if filename.endswith('.xml'):
file_path = os.path.join(source_dir, filename)
tree = ET.parse(file_path)
root = tree.getroot()

# Process each platformID group
for platformID in ['0', '1', '3']:
elements = root.findall(f".//namerecord[@platformID='{platformID}']")
if elements:
nameID_elements = {int(el.get('nameID')): el for el in elements}
if 8 not in nameID_elements:
# Create a new element with nameID="8"
new_element = ET.Element('namerecord', attrib={
'nameID': '8',
'platformID': platformID,
'platEncID': elements[0].get('platEncID'),
'langID': elements[0].get('langID'),

})
new_element.text = "\r" "    " "New Entry" "\r" "    "

# Insert the new element in the correct position
sorted_nameIDs = sorted(list(nameID_elements.keys()) + [8])
insert_index = sorted_nameIDs.index(8)

# Find the parent element
parent = root.find(".//name")
parent.insert(insert_index, new_element)

# Write the modified XML to the target directory
target_file_path = os.path.join(target_dir, filename)
tree.write(target_file_path, encoding='utf-8', xml_declaration=True)

source_directory = input("Enter the source directory: ")
target_directory = input("Enter the target directory: ")
process_ttx_files(source_directory, target_directory)
Вот пример входного файла, требующего вставки.
Обратите внимание, что идентификаторы платформы сгруппированы вместе и в последовательном порядке по nameID:

Код: Выделить всё





Safe


Kitten


Calico


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico



Safe


Kitten


Calico


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico



Safe


Kitten Calico


Vanilla


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico




Этот код Python выдал следующее. Обратите внимание, что новые записи не группируются по идентификаторам платформы в последовательном порядке по идентификатору имени:

Код: Выделить всё





Safe


Kitten


Calico


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico



New Entry

New Entry

New Entry

Safe


Kitten


Calico


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico



Safe


Kitten Calico


Vanilla


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico




Я пытался получить вывод XML, который выглядит следующим образом:

Код: Выделить всё





Safe


Kitten


Calico


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico


New Entry



Safe


Kitten


Calico


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico


New Entry



Safe


Kitten Calico


Vanilla


KittenCalico:1135918450


KittenCalico


1.00


KittenCalico


New Entry




Кроме того, некоторые XML-файлы будут содержать nameID="7" и nameID после 8, например nameID="9", nameID="10" и т. д., поэтому nameID=8 не обязательно будет находиться в конце каждого идентификатора платформы, а будет между последовательными элементами nameID.
Я не знаю, как это сделать. напишите код для достижения этой цели. Любая помощь будет оценена по достоинству, спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... ython-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»