首页 > 解决方案 > 在python中使用LXML时“\n”和“'”的转义问题

问题描述

我正在尝试使用 LXML 处理 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)

有谁知道如何逃避那些特殊字符?谢谢你的帮助!

标签: pythonxmlescapinglxmlspecial-characters

解决方案


推荐阅读