Python lxml предотвращает преобразование <или больше> в <и> - PullRequest
0 голосов
/ 30 мая 2018

Я использую lxml для генерации большого файла XML.Одним из тегов, используемых в файле, является «лямбда», поэтому я не могу определить его, как обычно.(и нет, я не могу изменить имя тега)

Код:

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>

Поскольку это так, я простохотел ввести теги "лямбда" вручную.Однако, когда я пытаюсь это сделать, символы «меньше» или «больше» вокруг «лямбда» преобразуются в <и>.Код:

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>

Как я могу предотвратить преобразование символов <и> таким образом?

1 Ответ

0 голосов
/ 30 мая 2018

вы можете использовать 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'
...