Python lxml 防止小于 < 或大于 > 被转换为 < 和 >
Python lxml prevent less than < or greater > from being converted to < and >
我正在使用 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" 周围的 "less than" 或 "greater than" 符号被转换为 < 和 >。
代码:
E = lxmlBuilder.ElementMaker()
root = E.root
lbd = "<lambda>%f</lambda>" % 1 #by hand
myTree = root(
lbd
)
print ETree.tostring(myTree, pretty_print=True)
结果:
<root>
<lambda>1.0000</lambda>
</root>
如何防止 < 和 > 符号被这样转换?
您可以使用 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'
我正在使用 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" 周围的 "less than" 或 "greater than" 符号被转换为 < 和 >。 代码:
E = lxmlBuilder.ElementMaker()
root = E.root
lbd = "<lambda>%f</lambda>" % 1 #by hand
myTree = root(
lbd
)
print ETree.tostring(myTree, pretty_print=True)
结果:
<root>
<lambda>1.0000</lambda>
</root>
如何防止 < 和 > 符号被这样转换?
您可以使用 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'