[Python-de] XML konforme Strings

Walter Dörwald walter at livinglogic.de
Mon Jul 12 17:45:42 CEST 2004


Sebastian Moors wrote:

> hi !
> ich suche eine python funktion, die mir die umlaute und andere sonderzeichen 
> in einem string in xml konforme entitäten übersetzt. z.b. sollte aus 
> "übersetzen" "übersetzen" werden.
> gibt es sowas ?? ich kenne ähnliche funktionen aus php, doch in der python 
> libary reference konnte ich nichts finden.

Wenn Du character references verwenden willst, dann kannst Du (mit
Python 2.3) folgendes machen:

print u"übersetzen".encode("ascii", "xmlcharrefreplace")

::: übersetzen

Wenn Du unbedingt entity references haben willst, geht das auch,
und zwar folgendermaßen:

import codecs, htmlentitydefs

def xmlentrefreplace(exc):
    if not isinstance(exc, UnicodeEncodeError):
       raise TypeError("don't know how to handle %r" % exc)
    rep = []
    for c in exc.object[exc.start:exc.end]:
      try:
         rep.append(u"&%s;" % htmlentitydefs.codepoint2name[ord(c)])
      except KeyError:
         rep.append(u"&#%d;" % ord(c))
    return (u"".join(rep), exc.end)

codecs.register_error("xmlentrefreplace", xmlentrefreplace)

print u"übersetzen".encode("ascii", "xmlentrefreplace")

::: übersetzen


Bis demnächst,
    Walter Dörwald