我有一个XML文件,我正在使用Python&输出为Python代码到文件。
某些XML包含Reg Ex值和字符串,它们将在屏幕上显示为对话框,因此我需要维护一些特殊字符。代码如下,但如何做到这一点?
XML看起来有点像这样;
<variable id="passportnumber" value="" type="String">
<validate>
<regularExpression fieldID="passportnumber" errorID="3007162"><![CDATA[^[a-zA-Z+:?<>;*()%="!0-9./',&\s-]{1,35}$]]></regularExpression>
</validate>
</variable>
对话;
<if>
<condition><![CDATA[$taxcode$ == $previousemergencytaxcode$ and $previousemergencytaxcode$ != $emergencytaxcode$]]></condition>
<then>
<dialog id="taxCodeOutdatedDialog" text="Are you sure this is the correct tax
code? The emergency code for the tax year 2011-12 was
'$previousemergencytaxcode$'. The emergency code for the tax
year 2012-13 is '$emergencytaxcode$'. Proceed?" type="YES|NO|CANCEL" />
</then>
</if>
完整的Python脚本是here,解析这两个脚本的细节是;
def parse_regularExpression(self, elem):
self.out('')
self.out("item_regularExpression(fieldID='{0}', value='{1}')".format(elem.attrib['fieldID'],elem.text))
def parse_dialog(self, elem):
self.out('')
self.out("item_dialog(id='{0}', text='{1}', type='{2}')".format(elem.attrib['id'], elem.attrib['text'],elem.attrib['type']))
换行(
)是我不确定如何处理的主要内容。似乎etree正在输出即使它是三重引用的换行符。它输出文本值为;
item_dialog(id='taxCodeOutdatedDialog', text='Are you sure this is the correct tax code?
The emergency code for the tax year 2011-12 was '$previousemergencytaxcode$'.
The emergency code for the tax year 2012-13 is '$emergencytaxcode$'.
Proceed?', type='YES|NO|CANCEL')
答案 0 :(得分:1)
我认为这正是你所要做的。 XML包含

,我认为这是换行符。然后你打印出那个字符串。
如果你想用打印输出中的其他内容替换换行符,那么在阅读之后你可能最好这样做,但在输出之前。 (而不是尝试在XML中更改它)。
您的代码最终会看起来像这样:
def parse_dialog(self, elem):
self.out('')
self.out("item_dialog(id='{0}', text='{1}', type='{2}')".format(
escape_string(elem.attrib['id']),
escape_string(elem.attrib['text']),
escape_string( elem.attrib['type']) ))
def escape_string(s):
...
这也非常强大,因为您的问题本质上是脚本注入问题/漏洞。