我使用Python的xml.dom.minidom
创建一个XML文档。 (逻辑结构 - > XML字符串,而不是相反。)
我如何使它逃避我提供,使他们不能把事情弄糟XML字符串?
我使用Python的xml.dom.minidom
创建一个XML文档。 (逻辑结构 - > XML字符串,而不是相反。)
我如何使它逃避我提供,使他们不能把事情弄糟XML字符串?
你的意思是你做这样的事情:
from xml.dom.minidom import Text, Element
t = Text()
e = Element('p')
t.data = '<bar><a/><baz spam="eggs"> & blabla &entity;</>'
e.appendChild(t)
那么你会得到很好的转义XML字符串:
>>> e.toxml()
'<p><bar><a/><baz spam="eggs"> & blabla &entity;</></p>'
像这样的事情?
>>> from xml.sax.saxutils import escape
>>> escape("< & >")
'< & >'
xml.sax.saxutils.escape
仅逸出&
, <
,和>
默认,但它确实提供了一个entities
的参数额外逃脱其他字符串:
from xml.sax.saxutils import escape
def xmlescape(data):
return escape(data, entities={
"'": "'",
"\"": """
})
xml.sax.saxutils.escape
使用str.replace()
内,所以你也可以跳过导入,写自己的功能,如图MichealMoser的答案。
xml.sax.saxutils没有逃脱引号字符(“)
因此,这里是另一个问题:
def escape( str ):
str = str.replace("&", "&")
str = str.replace("<", "<")
str = str.replace(">", ">")
str = str.replace("\"", """)
return str
如果你看它,那么只有xml.sax.saxutils不字符串替换
如果你不希望其他项目导入和你已经拥有cgi
,你可以这样做:
>>> import cgi
>>> cgi.escape("< & >")
'< & >'
但是请注意,这段代码的可读性受到影响 - 你应该把它放在一个函数来更好地描述你的意图:(和编写单元测试它,而你在它;)
def xml_escape(s):
return cgi.escape(s) # escapes "<", ">" and "&"