2009-10-30 9 views
1

Je travaille sur un moteur de balayage simple en Python. Le but est de créer un sitemap.xml. (vous pouvez trouver la version alpha ici: http://code.google.com/p/sitemappy/) J'ai remarqué que si je génère le XML avec des URL contenant des entités non HTML (telles que &), le XML ne valide pas et il n'est pas accepté par Google Outils pour les webmasters . Existe-t-il un moyen rapide de coder la partie querystring des URL?Convert & & en Python

Merci!

Matteo

Répondre

7

cgi.escape à la rescousse:

cgi.escape(s[, quote])

Convertir les caractères '&', '<' et '>' dans la chaîne s à des séquences HTML sûres. Utilisez ceci si vous avez besoin d'afficher du texte pouvant contenir de tels caractères en HTML. Si le guillemet facultatif est vrai, le caractère guillemet ('"') est également traduit, ce qui aide à l'inclusion dans une valeur d'attribut HTML, comme dans. Si la valeur à citer peut inclure des guillemets simples ou doubles, ou les deux, envisagez d'utiliser la fonction dans le module xml.sax.saxutils à la place

contrôle interactif rapide quoteattr():.

>>> import cgi 
>>> cgi.escape('<&>') 
'&lt;&amp;&gt;' 
>>> 
+0

Vous ne peut pas aller ligne par ligne et exécuter un fichier XML via cette fonction. Il a été déprécié et remplacé par html.escape (s, quote = True), mais il n'y a toujours aucun moyen d'échapper sélectivement des esperluettes. Le problème est que la fonction échappera également aux crochets d'angle de balise XML qui déclencheront ParseErrors. Il vaut mieux analyser ligne par ligne et créer un nouveau fichier ou éditer le fichier à la place line.replace ("&", "&") – aJetHorn

6

Saxutils a une fonction pour échapper à des entités XML:

>>> from xml.sax import saxutils 
>>> saxutils.escape("&") 
'&amp;'