Я предполагаю, что вы на самом деле создаете дерево DOM XML, потому что вы хотите проверить, что то, что входит в этот файл, является действительным XML, поскольку в противном случае вы просто записали бы в файл статическую строку. Если проверка ваших результатов действительно является вашей целью, то я бы предложил
from xml.dom.minidom import parseString
doc = parseString("""<html>
<head>
<script type="text/javascript">
var a = 'I love &aacute; letters'
</script>
</head>
<body>
<h1>And I like the fact that 3 > 1</h1>
</body>
</html>""")
with open("foo.xhtml", "w") as f:
f.write( doc.toxml() )
Это позволяет вам просто написать XML, который вы хотите вывести, проверить его корректность (поскольку parseString вызовет исключение, если оно недопустимо), и ваш код будет выглядеть намного лучше.
Предположительно, вы не просто пишете один и тот же статический XML каждый раз и хотите какую-то замену. В этом случае у меня были бы строки вроде
var a = '%(message)s'
, а затем используйте оператор% для подстановки, например
</html>""" % {"message": "I love &aacute; letters"})