【问题标题】:Python lxml prevent less than < or greater > from being converted to &lt and &gtPython lxml 防止小于 < 或大于 > 被转换为 &lt 和 &gt
【发布时间】:2018-05-30 20:50:35
【问题描述】:

我正在使用 lxml 生成一个大型 XML 文件。文件中使用的标签之一是“lambda”,所以我不能像往常一样定义它。 (不,我不能更改标签的名称)

代码:

import lxml.etree as ETree
import lxml.builder as lxmlBuilder

E = lxmlBuilder.ElementMaker()
root = E.root
lbd = E.lambda  #error since lambda is reserved

myTree = root(
     lbd('1')
    )

print ETree.tostring(myTree, pretty_print=True)

预期结果:

<root>
    <lambda>1</lambda>
</root>

既然如此,我只想手动输入“lambda”标签。但是,当我尝试这样做时,“lambda”周围的“小于”或“大于”符号将转换为 &lt 和 &gt。 代码:

E = lxmlBuilder.ElementMaker()
root = E.root
lbd = "<lambda>%f</lambda>" % 1 #by hand

myTree = root(
     lbd
    )

print ETree.tostring(myTree, pretty_print=True)

结果:

<root>
    &lt;lambda&gt;1.0000&lt;/lambda&gt;
</root>

如何防止 符号像这样被转换?

【问题讨论】:

    标签: python xml python-2.7 lxml


    【解决方案1】:

    您可以使用lbd = getattr(E, 'lambda') 代替lbd = E.lambda 来克服保留关键字的限制。

    >>> import lxml.etree as ETree
    >>> import lxml.builder as lxmlBuilder
    >>> E = lxmlBuilder.ElementMaker()
    >>> root = E.root
    >>> lbd = getattr(E, 'lambda')
    >>> myTree = root(lbd('1'))
    >>> ETree.tostring(myTree, pretty_print=True)
    b'<root>\n  <lambda>1</lambda>\n</root>\n'
    

    【讨论】:

      猜你喜欢
      • 2015-09-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      相关资源
      最近更新 更多