how to create a sub-element through variable in python 3.6.5

人走茶凉 提交于 2019-11-28 10:26:56

问题


My code is:

import xml.etree.ElementTree as ET
from lxml import etree
var1 = '<name>This is my text</name>'
page = etree.Element('first')
doc = etree.ElementTree(page)
second = etree.SubElement(page, 'second')
second.text = var1
doc.write('a.xml', xml_declaration=True, encoding='utf-8')

My output is:

<?xml version='1.0' encoding='UTF-8'?>
<first><second>&lt;name&gt;This is my text&lt;/name&gt;</second></first>

My Desired Output is:

<?xml version='1.0' encoding='UTF-8'?>
<first><second><name>This is my text</name></second></first>

Actually, I want to create sub-element through variable and I don't know how many elements are available in our variable. this is only for test purpose so please take care of this.


回答1:


It is not possible to create a subelement by supplying it as a string of XML markup. The <name> element has to be created using SubElement, just like <second>.

The following code produces the desired output:

from lxml import etree

page = etree.Element('first')
second = etree.SubElement(page, 'second')
name = etree.SubElement(second, 'name')
name.text = "This is my text"

doc = etree.ElementTree(page)
doc.write('a.xml', xml_declaration=True, encoding='utf-8')

An alternative is to parse the <name>This is my text</name> string into an Element object and append it to the parent:

from lxml import etree

var1 = '<name>This is my text</name>'
name = etree.fromstring(var1)

page = etree.Element('first')
second = etree.SubElement(page, 'second')
second.append(name)

doc = etree.ElementTree(page)
doc.write('b.xml', xml_declaration=True, encoding='utf-8')


来源:https://stackoverflow.com/questions/53332815/how-to-create-a-sub-element-through-variable-in-python-3-6-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!