Как избежать двойного выхода с помощью XML - PullRequest
0 голосов
/ 19 июня 2020

Я использую python, чтобы создать программу, которая должна будет записывать данные в тег XML указанного c файла.

Строка данных, которую я хочу записать это следующее.

<Stream>XXXX-XXXX-XXXX-XXXX?p=0</Stream><URL>rtmp://a.rtmp.youtube.com/live2</URL>

Но то, что я получаю в моем XML файле после записи, сильно отличается.

<Stream>XXXX-XXXX-XXXX-XXXX?p=0</Stream><URL>rtmp://a.rtmp.youtube.com/live2</URL>

Знаки <и> здесь специально, а НЕ <и>. Мне нужно сохранить это форматирование, но когда я использую экспорт как файл xml, он заменяет все & на &amp;

Я использую этот код для записи данных в файл xml:

from lxml import etree as ET

Name_with_single_quote= """IF [Calculation_1] = 'Day-1' THEN [begintime] + 1
ELSEIF[Calculation_1] < 'Day-2' THEN [begintime] + 2
ELSEIF  [Calculation_1] > "Day-3" THEN [begintime] + 3
ELSE [begintime]
END"""

Name_with_single_quote = Name_with_single_quote.replace("\n", "&#10;").replace("<", "&lt;").replace("'", "&apos;").replace(">","&gt;").replace("\"", "&quot;")
Name_with_single_quote = str(Name_with_single_quote)

xml = """<?xml version="1.0"?>
<column role="dimension" type="nominal" name="[Calculation_1]" datatype="boolean" caption="">
<calculation formula=""/>
</column>"""

tree = ET.fromstring(xml)
formula = tree.find('.//calculation')
formula.set('formula', Name_with_single_quote)

from xml.dom import minidom
xmlstr = minidom.parseString(ET.tostring(tree)).toprettyxml()
xmlstr = '\n'.join(list(filter(lambda x: len(x.strip()), xmlstr.split('\n'))))
with open('test_for_esc_result.xml', "w") as f:
    f.write(xmlstr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...