Как создать подэлемент через переменную в Python 3.6.5 - PullRequest
0 голосов
/ 16 ноября 2018

Мой код:

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')

Мой вывод:

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

Мой желаемый вывод:

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

На самом деле, я хочу создать саб-элемент через переменную, и я не знаю, сколько элементов доступно в нашей переменной.это только для целей тестирования, поэтому, пожалуйста, позаботьтесь об этом.

1 Ответ

0 голосов
/ 16 ноября 2018

Невозможно создать подэлемент, предоставив его в виде строки разметки XML.Элемент <name> должен быть создан с использованием SubElement, точно так же, как <second>.

Следующий код производит желаемый вывод:

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')

Альтернативой является синтаксический анализ <name>This is my text</name> строка в Element объект и добавление его к родителю:

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')
...