我使用Python的xml.dom.minidom
创建一个XML文档。 (逻辑结构 - > XML字符串,而不是其他方式)的Python:摆脱使用字符串XML
我如何让它逃脱我提供,使他们不能把事情弄糟XML字符串?
我使用Python的xml.dom.minidom
创建一个XML文档。 (逻辑结构 - > XML字符串,而不是其他方式)的Python:摆脱使用字符串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处理都是使用lxml完成的,我想知道是否导入(但是)另一个XML模块会被污染太多?在lxml中有相同的吗? (似乎无法找到一个。) – Jens 2013-08-17 02:52:34
这不处理引号逃逸。 – e1i45 2014-01-24 15:42:28
>>>从xml.sax.saxutils导入quoteattr >>> quoteattr含有"一个双引号\“和一个撇号(“值包含“双引号\”和一个撇号') ””值“‘ – user1048839 2016-05-06 09:50:05
如果你不希望其他项目导入和你已经有cgi
,你可以这样做:
>>> import cgi
>>> cgi.escape("< & >")
'< & >'
然而要注意,此代码的可读性受到影响 - 你应该把它放在一个函数来更好地描述你的意图:(和编写单元测试它,而你在它;)
def xml_escape(s):
return cgi.escape(s) # escapes "<", ">" and "&"
xml.sax .saxutils没有逃脱引号字符(“)
因此,这里是另一个问题:
def escape(str):
str = str.replace("&", "&")
str = str.replace("<", "<")
str = str.replace(">", ">")
str = str.replace("\"", """)
return str
如果你看它,然后xml.sax.saxutils不仅字符串替换
可能要逃跑也单引号字符,即’ – Petri 2016-10-12 09:52:40
最好避免使用关键字'str'为您的变量名称。 – twasbrillig 2017-03-15 20:06:09
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 DOM串行器将相应地转义字符的数据,因为它熄灭......这就是DOM操作是,防止你不必把你的手脏的标记。 – bobince 2009-10-10 01:56:30