javascript - Python lxml 库无法解析 < 和 >

标签 javascript python xml xml-parsing lxml

我有一个带有 javascript 的 XSLT,它使用“<”和“>” 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 &lt; 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 文件中的特殊字符

<;到 '<' 和 > ;到 '>'

是否有使用 LXML 替换“<”的标准做法?到“<”?

为了解决这个问题,我必须在写入文件之前再写一段代码。

content = content.replace("&gt;", ">")
content = content.replace("&lt;", "<")

最佳答案

为了解码/转换 HTML 实体,您应该在 tostring() 调用中使用 method="html":

ET.tostring(content, method="html", pretty_print=True)

或:

lxml.html.tostring(content, pretty_print=True)

演示:

from lxml import etree


text = """<html>
  <body>
    <script> 1 &lt; 2 </script>
  </body>
</html>
"""

tree = etree.fromstring(text)
print etree.tostring(tree, method="html")

打印:

<html>
  <body>
    <script> 1 < 2 </script>
  </body>
</html>

关于javascript - Python lxml 库无法解析 < 和 >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017253/

相关文章:

Python 模块 Mahotas 阈值问题

android - Listview改变键盘打开其他 View 的位置

JavaScript 未返回预期的正则表达式结果

c# - 将标签值从 C# 传递到 Bootstrap 模式

python - 由于文档中的示例已损坏,如何在 SymPy 中以数值方式求解非线性方程组?

python - 使用 Flask 和 BeautifulSoup 时编码错误 : input conversion failed due to input error, 字节 0x9D 0x29 0x2E 0x20

java - 按下按钮后,结果未显示。用于计算小费的 Android 应用程序

php - 如何将 SQL Server 中的 XML 数据读取到 PHP 中

javascript - 您可以使用 Django 框架将 Python 用于前端和后端吗?

javascript - Yammer REST API - 使用换行符发布到 messages.json