python - 如何使用 python lxml 通过 xslt 加速大型 xml 文件的转换

标签 python xml xslt lxml

下面是我的源代码:

from lxml import etree as ET

tree = ET.parse("test.xml")
xslt = ET.parse("test.xsl")
transform = ET.XSLT(xslt)

print "before transform"
newTree = transform(tree)
print "after transform"
print str(newTree)

当 test.xml 较小时,脚本运行良好。 当test.xml很大(>100MB或GB)时,脚本将运行很长时间。

我发现瓶颈是“newTree=transform(tree)”。

还有其他方法可以在 python lxml 中使用 xslt 转换 xml 文件吗?

最佳答案

如果您发现瓶颈是

newTree = transform(tree)

那么您的问题不是关于如何加快 解析 XML 的速度。解析是预先完成的,文档被读入内存(作为类似 ElementTree 的结构):

tree = ET.parse("test.xml")
xslt = ET.parse("test.xsl")

所以,也许您想问:

我可以加快大型输入文件的转换速度吗?

答案取决于代码中存在的操作类型。 lxml 不是瑞士军刀(就此而言,任何其他软件也不是)。在某些操作中,lxml 几乎是无与伦比的,而在其他操作中,它的性能明显优于 cElementTree 等类似库。

例如,据说树遍历(将其视为更改上下文节点)非常快,而与 cET 相比,生成新元素的成本却很高。考虑解析、序列化和文档的大小:

whenever the input documents are not considerably bigger than the output, lxml is the clear winner.

这取自here在那里您会找到大量有关该主题的信息。

如果您所说的“转换”是指“应用 XSLT 样式表”,那么上述考虑因素就没有多大用处。 lxml 使用libxslt为此 - 它本身就是一个图书馆。

<小时/>

Is there any other methods to parse xml files with xsl in python lxml?

还有其他库,例如cElementTree。然而,我仅使用它来处理 XML 输入 - 并且应用 XSLT 样式表可能会很麻烦。

但在得出结论之前,您应该确定样式表中存在的操作,比较输入和输出大小并研究 lxml performanceperformance of your stylesheet .

您应该知道,1 GB 的 XML 文件非常大,我不希望它在任何地方都能顺利解析或转换。

关于python - 如何使用 python lxml 通过 xslt 加速大型 xml 文件的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22319964/

相关文章:

python - 在循环中为 Tkinter 条目小部件创建 StringVar 变量

android - 我们可以在 Android 应用程序中使用 Tomcat 服务器吗?

jquery - 导入 XML 值?

java - XMl解析中的空指针异常

xslt - 根据所需长度分割字符串

python - 使用 Selenium 对隐藏元素进行数据输入(Python 2.7)- 元素不可见

python - 编译一个 .pyw 文件,这样它就可以在没有控制台的情况下像 .pyc 一样运行

sql-server - XSL - GML 到 json

c# - 从服务器返回的字符串包含\t\r\n

python - 什么是 alpha 修剪均值滤波器?