У меня есть XML-файл с некоторой древовидной структурой, элементами, атрибутами, текстом.
Мне нужно использовать этот XML в качестве шаблона (древовидную структуру и теги) и создать другой XML, который может не иметь одинакового количества элементов (т. Е. В шаблоне ниже есть два элемента 'column', но один, который я хочу создать, имеет три элементы 'столбец').
Ниже приведен XML-код, который я хочу использовать в качестве шаблона
<custom-data>
<schema>SCHEMA</schema>
<columns>
<column>
<name>ORGANIZATION</name>
<datatype>NUMBER</datatype>
<length/>
<precision>18</precision>
<not-null>Yes</not-null>
</column>
<column>
<name>LOCATION</name>
<datatype>NUMBER</datatype>
<length/>
<precision>18</precision>
<not-null>Yes</not-null>
</column>
</columns>
</custom-data>
Вместо того, чтобы определять похожее дерево, используя lxml, определяя каждый элемент один за другим, как показано ниже.
Например, если 'df' - мой фрейм данных для панд с данными. который имеет столбцы как (целевой столбец, тип данных, длина, масштаб, обнуляемый ._
Target Column Data Type Length Scale Nullable
COLUMN1 NUMBER 38 0 N
COLUMN2 NUMBER 38 0 N
COLUMN3 NUMBER 38 0 N
Ниже приведен пример кода Python, который я использую
from lxml import etree as et
root = et.Element('custom-data')
schema= et.SubElement(root, 'schema')
schema.text='SCHEMA'
columns= et.SubElement(root, 'columns')
for row in df.iterrows():
column = et.SubElement(columns, 'columns')
name = et.SubElement(column , 'name')
datatype = et.SubElement(column , 'datatype')
length = et.SubElement(column , 'length')
precision = et.SubElement(column , 'precision')
notnull = et.SubElement(column , 'not-null')
name.text = str(row[1]['Target Column'])
datatype.text = str(row[1]['Data Type'])
length.text = str(row[1]['Length'])
precision.text = str(row[1]['Scale'])
notnull.text = str(row[1]['Nullable'])
xml_test=et.tostring(root, pretty_print=True).decode('utf-8')
f=open("xml_test.xml", "w")
f.write(xml_test)
Ожидаемый результат -
<custom-data>
<schema>SCHEMA</schema>
<columns>
<column>
<name>COLUMN1</name>
<datatype>NUMBER</datatype>
<length>38</length>
<precision>0</precision>
<not-null>N</not-null>
</column>
<column>
<name>COLUMN2</name>
<datatype>NUMBER</datatype>
<length>38</length>
<precision>0</precision>
<not-null>N</not-null>
</column>
<column>
<name>COLUMN3</name>
<datatype>NUMBER</datatype>
<length>38</length>
<precision>0</precision>
<not-null>N</not-null>
</column>
</columns>
</custom-data>
Как я могу использовать структуру, приведенную в примере XML, чтобы мне не нужно было снова определять ее в моем коде. Какой-нибудь более простой метод?