Сущность символов разрыва строки XML и кодировка Python - PullRequest
0 голосов
/ 04 июля 2019

У меня есть следующая строка кода в скрипте Python:

dep11 = ET.SubElement(dep1, "POVCode").text = "#declare lg_quality = LDXQual;
#if (lg_quality = 3)
#declare lg_quality = 4;
#end"

Мой вопрос касается символа 
. Я хочу видеть эту символьную сущность в выводе XML, но первый амперсанд продолжает заменяться символьной сущностью &, которая создает бессмысленную символьную сущность 
.

Я кодирую файл как utf-8.

import xml.etree.ElementTree as ET

...

with open("LGEO.xml", "wb") as f:
    tree.write(f, "utf-8")

И я получаю:

<POVCode>#declare lg_quality = LDXQual;&amp;#x0A;#if (lg_quality = 3)&amp;#x0A;#declare lg_quality = 4;&amp;#x0A;#end</POVCode>

Не уверен, что я делаю неправильно.

[править]

Я пытаюсь реализовать найденное здесь решение, на которое указал @mzjn.

Как вывести ссылки на сущности XML

У меня есть шесть строк кода:

dep11 = ET.SubElement(dep1, "POVCode")
dep21 = ET.SubElement(dep2, "POVCode")
dep11.text = "#declare lg_quality = LDXQual;&&#x0A;#if (lg_quality = 3)&&#x0A;#declare lg_quality = 4;&&#x0A;#end"
dep21.text = "#declare lg_studs = LDXStuds;&&#x0A;"
ET.tostring(dep11).replace('&amp;&amp;', '&')
ET.tostring(dep21).replace('&amp;&amp;', '&')

Я не получаю ошибки, но результат ничем не отличается от предыдущего, когда я write дерево.

Снова я застрял.

1 Ответ

0 голосов
/ 09 июля 2019

В конечном итоге я использовал стандартную функцию Python write вместо собственной функции ElementTree write.

text = ET.tostring(root).replace("&amp;&amp;", "&")

with open("LGEO.xml", "wb") as f:
    f.write(text.encode("utf-8"))

Выше приведен последний шаг в коде Python.Я не знаю, есть ли недостатки для преобразования корневого объекта в строку, подобную этой.Это может быть медленнее, но у меня работает.

...