Я верю, что lxml будет вести себя так, как вы хотите

у получить устаревший XML-файл, манипулировать и сохранять его.

Вот мой код:

from xml.etree import cElementTree as ET
NS = "{http://www.somedomain.com/XI/Traffic/10}"

def fix_xml(filename):
    f = ET.parse(filename)
    root = f.getroot()
    eventlist = root.findall("%(ns)Event" % {'ns':NS })
    xpath = "%(ns)sEventDetail/%(ns)sEventDescription" % {'ns':NS }
    for event in eventlist:
        desc = event.find(xpath)
        desc.text = desc.text.upper() # do some editting to the text.

    ET.ElementTree(root, nsmap=NS).write("out.xml", encoding="utf-8")


shorten_xml("test.xml")

Файл, который я загружаю, содержит:

xmlns="http://www.somedomain.com/XI/Traffic/10"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.somedomain.com/XI/Traffic/10 10.xds"

в корневом теге.

У меня есть следующие проблемы, связанные с пространством имен:

Как видите, для каждого вызова тега в начале я дал пространство имен для извлечения ребенка.Сгенерированный XML-файл не имеет<?xml version="1.0" encoding="utf-8"?> в начале.Теги на выходе содержат такие<ns0:eventDescription> пока мне нужен вывод как оригинал<eventDescription>, без пространства имен в начале.

Как это можно решить?

Ответы на вопрос(2)

Ваш ответ на вопрос