Python lxml 电子工厂

标签 python xml lxml elementtree

我一直在使用 lxml“E-Factory”(又名 ElementMaker)来创建 xml 文档。我正在尝试生成与此类似的 xml 文档:

<url>
  <date-added>2011-11-11</date-added>
</url>

但是,使用 E-factory,我不确定如何在“添加数据”元素中指定破折号。它似乎将破折号解释为减号。

这是我一直在引用的文档: http://lxml.de/tutorial.html#the-e-factory

重现错误的方法如下:

from lxml import etree
from lxml.builder import ElementMaker 

E = ElementMaker()
URL = E.url
DATE_ADDED = E.date-added

xml = URL(DATE_ADDED(myobject.created.strftime('%Y-%m-%dT%H:%M:%S')),)


NameError global name 'added' is not defined

有没有人知道一个技巧来让它正确渲染带有破折号的元素?

感谢您阅读本文。

最佳答案

说明:E. 后面的内容需要是 valid Python identifier .这包括下划线但不包括连字符。 E.date-added 被“成功”编译,就好像它是 (E.date) - added 但随后在运行时失败,因为(在您的情况下) 添加 未定义。

备选方案:

(1) E.tag 只是一种装饰技巧,不适用于所有合法的 XML 标记。实际上,Python 对象属性几乎可以是任何旧垃圾,您不能在源代码中执行 obj.really+funky%attribute*name,dude。一个失败的技巧值得一个更好的技巧:您可以保持相同的元素创建模式,即不需要在每次创建元素时指定标签,方法是:

DATE_ADDED = getattr(E, 'date-added')

然后像现在一样使用 DATE_ADDED

(2) 如果架构在您的控制之下,请使用下划线 (date_added) 而不是连字符 (date-added)。

关于Python lxml 电子工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8061250/

相关文章:

python - numpy 与 python : convert 3d array to 2d

python - 导入 matplotlib.pyplot 时的警告消息

python - 如何从 HTML 页面但从元素本身提取或抓取数据

javascript - 将 JSON 存储在磁盘上不好吗?

java - 如何检测xml节点的数量?

python - 使用 Python 在低级别执行页面的 JavaScript?

python - 编解码器无法编码字符python3

python - 使用 pyodbc 创建列 - 不工作

javascript - Ajax 文件加载和 &lt;input&gt; 文件加载之间的区别?

xml - 如何将 XmlNode 从一个 XmlDocument 复制到另一个?