Вопрос по python, xml – python: тег объявления xml.etree.elementtree.ElemenTtree.write ()

12

Я создал документ XML с использованием xml.etree.elementtree.Element и хотел напечатать его с помощью функции ElementTree.write (). но тег объявления, который выходит

<?xml version='1.0' encoding='UTF-8'?>

Пока мне нужно быть в двойных кавычках. Есть ли способ изменить это?

Э-э ... зачем вам двойные кавычки? Tim Pietzcker
@TimPietzcker вот пример из дикой природы:Moodle checks for a raw declaration string (включая двойные кавычки) и будет рассматривать файл резервной копии как недействительный, если он не найдет его в нужном месте. supervacuo
одинарные кавычки жестко закодированы вwrite метод, поэтому их невозможно изменить. все, что вы можете сделать, это изменить их послесловия. mata
потому что это задание, и по какой-то причине учитель делает различия в XML. Вместо сравнения элементов. Bg1987
почему это вообще имеет значение? это одинаково действительный xml с одинарными или двойными кавычками. mata

Ваш Ответ

4   ответа
0

как bg1987. Вот функция, которую я написал на случай, если она кому-нибудь пригодится

def wrTmp(treeObject, filepath):
    xml_str = ('<?xml version="1.0" encoding="UTF-8"?>' + '\n' + xml.etree.ElementTree.tostring(treeObject.getroot(), method='xml'))
    with open(filepath, 'wb') as xml_file:
         xml_file.write(xml_str)
0

за исключением другого, из-за взломов в различных инструментах $ workplace, которые требуют одинарных кавычек, где PythonElementTree.write ставит в двойные кавычки. (Немного кода ищет буквенную строкуstatus='ok' и не признаетstatus="ok", Да, этот код поврежден (на самом деле, в нескольких отношениях), но мне просто нужно обойти это.)

К счастью, «пользовательские данные» одинарные или двойные кавычки кодируются как&apos; а также&quot; (соответственно). В моем случае я уже использовалtostring скорее, чемwrite (по другим причинам), поэтому у меня есть:

import xml.etree.ElementTree as ET
# [... mass snippage]
        text = ET.tostring(reply).replace('"', "'")
        # [... snippaage]
        self.wfile.write(text)

(Очевидно, вы захотитеreplace("'", '"') вместо.)

@pepr: я предоставлю теоретическую возможность, но во всех моих тестах (которые, конечно, были специфичны для моих данных и, возможно, также для установленных библиотек python),xml.etree.ElementTree всегда кодируются двойными кавычками как&quot; если бы они были разрешены в этом положении вообще.
Проблема в том, что некоторые значения в одинарных кавычках могут содержать двойные кавычки. Простая замена может сломать контент.
3

ElementTree.py и увидел следующее.

Для корневого тега (одинарные кавычки):

        if method == "xml":
            write("<?xml version='1.0' encoding='%s'?>\n" % encoding)

А для атрибутов (двойные кавычки):

write(" %s=\"%s\"" % (qnames[k], v))

Это так закодировано ...

Я изменил его (локально) на:

"<?xml version=\"1.0\" encoding=\"%s\"?>\n"

Таким образом, каждый атрибут в двойных кавычках.

1

ому тегу а затем функция Python file.write. Это некрасиво (и я имею в виду фактическую кодировку файла), но это работает.

Не могли бы вы предоставить код, который вы написали, чтобы обойти это?

Похожие вопросы