我有一个带有javascript的XSLT,它使用“& lt;”和“& gt;”在for循环中
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head> </head>
<body>
<script language="javascript" type="text/javascript">
function example() {
var trs = document.getElementsByTagName("tr");
for (var i = 0; i < trs.length; i++) {
}
}
</script>
</body>
</html>
我正在使用PYTHON LXML库使用XSLT和XML生成HTML。
import lxml.etree as ET
xml = ET.parse('sample.xml')
xslt = ET.parse('sample.xsl')
transform = ET.XSLT(xslt)
content = transform(xml)
f = open('output.html','w')
f.write(ET.tostring(content , pretty_print=True))
f.close()
但是LXML无法替换输出HTML文件中的特殊字符
&amp; lt;到'&lt;'和&amp; gt;到'&gt;'
是否有任何使用LXML替换“&amp; lt;”的标准做法到'&lt;' ?
要解决这个问题,我必须先写另一段代码才能写入文件。
content = content.replace(">", ">")
content = content.replace("<", "<")
答案 0 :(得分:5)
为了解码/转换HTML实体,您应该在method="html"
电话中使用tostring()
:
ET.tostring(content, method="html", pretty_print=True)
或:
lxml.html.tostring(content, pretty_print=True)
样本:
from lxml import etree
text = """<html>
<body>
<script> 1 < 2 </script>
</body>
</html>
"""
tree = etree.fromstring(text)
print etree.tostring(tree, method="html")
打印:
<html>
<body>
<script> 1 < 2 </script>
</body>
</html>
答案 1 :(得分:1)
您也可以将CDATA包装中的脚本内容包围起来以阻止它被吃掉,如下所示:
<script language="javascript" type="text/javascript">
<![CDATA[
function example() {
var trs = document.getElementsByTagName("tr");
for (var i = 0; i < trs.length; i++) {
}
}
]]>
</script>