Устранение проблемы "\ n" и "'" при использовании L XML в python - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь использовать L XML для обработки строки в файле XML. Проблема в том, что выходной файл не может экранировать некоторые специальные символы (например, «\ n» и «'»). Вот текст, который мне нужно обработать:

входной текст:

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

фактический выходной текст:

IF [Calculation_1] = 'Day-1' THEN [begintime] + 1
ELSEIF[Calculation_1] &lt; 'Day-2' THEN [begintime] + 2
ELSEIF  [Calculation_1] &gt; &quot;Day-3&quot; THEN [begintime] + 3
ELSE [begintime]
END

ожидаемый выходной текст:

IF [Calculation_1] = &apos;Day-1&apos; THEN [begintime] + 1&#10;ELSEIF[Calculation_1] &lt; &apos;Day-2&apos; THEN [begintime] + 2&#10;ELSEIF  [Calculation_1] &gt; &quot;Day-3&quot; THEN [begintime] + 3&#10;ELSE [begintime]&#10;END

Мои python сценарии:

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)

Кто-нибудь знает, как избежать этих специальных символов? Спасибо за помощь!

...