跳转至

lxml 常见问题解答

lxml FAQ - Frequently Asked Questions

Frequently asked questions on lxml. See also the notes on compatibility to ElementTree.

有关 lxml 的常见问题。 另请参阅有关 ElementTree 兼容性的说明。

内容

  • 一般问题
    • 有教程吗?
    • 在哪里可以找到有关 lxml 的更多文档?
    • lxml执行什么标准?
    • 谁使用lxml?
    • lxml.etree 和 lxml.objectify 之间有什么区别?
    • 如何让我的应用程序运行得更快?
    • 序列化元素上的尾随文本怎么样?
    • 如何确定某个元素是评论还是 PI?
    • 如何将 XML 树映射到字典的字典中?
    • 为什么 lxml 有时会返回 Python 2 中文本的“str”值?
    • 为什么我在某些系统上会遇到 XInclude 或 DTD 查找失败的情况,而在其他系统上却不会?
    • 命名空间在 lxml 中如何工作?
  • 安装
    • 我应该使用或需要哪个版本的 libxml2 和 libxslt?
    • 二进制版本在哪里?
    • 为什么在安装 lxml 时出现缺少 UCS4 符号的错误?
    • 我的 C 编译器在安装时崩溃
  • 贡献
    • 为什么 lxml 不是用 Python 编写的?
    • 我怎样才能做出贡献?
  • 问题
    • 我的应用程序崩溃了!
    • 我的应用程序在 MacOS-X 上崩溃!
    • 我想我在 lxml 中发现了一个错误。 我应该怎么办?
    • 我如何知道错误确实存在于 lxml 中而不是 libxml2 中?
  • 线程
    • 我可以使用线程并发访问lxml API吗?
    • 如果我使用线程,我的程序运行得更快吗?
    • 如果我关闭线程,我的单线程程序会运行得更快吗?
    • 为什么我不能在其他线程中重用 XSLT 样式表?
    • 我的程序在使用 mod_python/Pyro/Zope/Plone/... 运行时崩溃
  • 解析和序列化
    • 为什么 Pretty_print 选项不重新格式化我的 XML 输出?
    • 为什么 lxml 无法从 unicode 字符串解析我的 XML?
    • lxml 可以解析以 unicode/text 模式打开的文件对象吗?
    • str(xslt(doc)) 和 xslt(doc).write() 有什么区别 ?
    • 为什么我不能在 iterparse() 中删除父节点或清除根节点?
    • 如何在 XML 文本中输出空字符?
    • lxml 是否容易受到 XML 炸弹的攻击?
    • 如何安全地使用 lxml 作为 Web 服务端点?
    • 如何对属性进行排序?
  • XPath 和 文档 相关
    • Element(Tree) 上的 findall() 和 xpath() 方法是什么?
    • 为什么 findall() 不支持完整的 XPath 表达式?
    • 如何找出文档中使用了哪些命名空间前缀?
    • 如何为 XPath 表达式指定默认命名空间?
    • 如何在迭代过程中修改树?

下面的代码示例使用lxml.etree模块:

>>> from lxml import etree

更多参考原文: https://lxml.de/FAQ.html

有关 lxml 的常见问题。 另请参阅有关 ElementTree 兼容性的说明。

Contents

  • General Questions
    • Is there a tutorial?
    • Where can I find more documentation about lxml?
    • What standards does lxml implement?
    • Who uses lxml?
    • What is the difference between lxml.etree and lxml.objectify?
    • How can I make my application run faster?
    • What about that trailing text on serialised Elements?
    • How can I find out if an Element is a comment or PI?
    • How can I map an XML tree into a dict of dicts?
    • Why does lxml sometimes return 'str' values for text in Python 2?
    • Why do I get XInclude or DTD lookup failures on some systems but not on others?
    • How do namespaces work in lxml?
  • Installation
    • Which version of libxml2 and libxslt should I use or require?
    • Where are the binary builds?
    • Why do I get errors about missing UCS4 symbols when installing lxml?
    • My C compiler crashes on installation
  • Contributing
    • Why is lxml not written in Python?
    • How can I contribute?
  • Bugs
    • My application crashes!
    • My application crashes on MacOS-X!
    • I think I have found a bug in lxml. What should I do?
    • How do I know a bug is really in lxml and not in libxml2?
  • Threading
    • Can I use threads to concurrently access the lxml API?
    • Does my program run faster if I use threads?
    • Would my single-threaded program run faster if I turned off threading?
    • Why can't I reuse XSLT stylesheets in other threads?
    • My program crashes when run with mod_python/Pyro/Zope/Plone/...
  • Parsing and Serialisation
    • Why doesn't the pretty_print option reformat my XML output?
    • Why can't lxml parse my XML from unicode strings?
    • Can lxml parse from file objects opened in unicode/text mode?
    • What is the difference between str(xslt(doc)) and xslt(doc).write() ?
    • Why can't I just delete parents or clear the root node in iterparse()?
    • How do I output null characters in XML text?
    • Is lxml vulnerable to XML bombs?
    • How do I use lxml safely as a web-service endpoint?
    • How can I sort the attributes?
  • XPath and Document Traversal
    • What are the findall() and xpath() methods on Element(Tree)?
    • Why doesn't findall() support full XPath expressions?
    • How can I find out which namespace prefixes are used in a document?
    • How can I specify a default namespace for XPath expressions?
    • How can I modify the tree during iteration?

The code examples below use the 'lxml.etree` module:

>>> from lxml import etree

更多参考原文: https://lxml.de/FAQ.html


最后更新: 2024年4月11日
创建日期: 2024年4月11日