私は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
引用符のエスケープは処理されません。 – e1i45
>>> xml.sax.saxutilsからはquoteattr "二重引用符\「とアポストロフィを含む >>> quoteattr(「を含む値 "二重引用符\」とアポストロフィ ') 」"値をインポート" – user1048839
を、あなた既にcgi
がある場合は、次のように使用できます。
>>> import cgi
>>> cgi.escape("< & >")
'< & >'
このコードの読みやすさが苦しんでいることが注意 - あなたは、おそらくより良いあなたの意図を記述するための機能でそれを置くべきである。(あなたはそれでいる間、それのためのユニットテストを書く;)
def xml_escape(s):
return cgi.escape(s) # escapes "<", ">" and "&"
xml.sax引用文字( ")だからここ
をエスケープしない.saxutilsは別のものです:あなたはそれを見て、その後xml.sax.saxutils場合
def escape(str):
str = str.replace("&", "&")
str = str.replace("<", "<")
str = str.replace(">", ">")
str = str.replace("\"", """)
return str
のみ文字列が
を置き換えません210単一引用符文字をエスケープしたい場合があります。 ' – Petri
キーワード' str'を変数として使用しないでください名。 – twasbrillig
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