我使用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