Я хочу создать файл XML, используя следующий список словарей и XML_file_1
Это словарь
[{'@name': 'has', '@degree': 'binary', '@type': 'one_to_one', 'member1': {'@name': 'employee', '@cardinality': 'one', '@primary_key': 'number'}, 'member2': {'@name': 'department', '@cardinality': 'one', '@primary_key': 'number'}}, {'@name': 'began_managing', '@degree': 'binary', '@type': 'one_to_one', 'member1': {'@name': 'department', '@cardinality': 'one', '@primary_key': 'number'}, 'member2': {'@name': 'employee', '@cardinality': 'one', '@primary_key': 'number'}}, {'@name': 'controls', '@degree': 'binary', '@type': 'one_to_many', 'member1': {'@name': 'projects', '@cardinality': 'many', '@primary_key': 'number'}, 'member2': {'@name': 'department', '@cardinality': 'one', '@primary_key': 'number'}}, {'@name': 'is_assigned', '@degree': 'binary', '@type': 'one_to_one', 'member1': {'@name': 'department', '@cardinality': 'one', '@primary_key': 'number'}, 'member2': {'@name': 'employee', '@cardinality': 'one', '@primary_key': 'number'}}, {'@name': 'is_working', '@degree': 'binary', '@type': 'one_to_one', 'member1': {'@name': 'project', '@cardinality': 'one', '@primary_key': 'number'}, 'member2': {'@name': 'employee', '@cardinality': 'one', '@primary_key': 'number'}}, {'@name': 'related_with', '@degree': 'binary', '@type': 'one_to_many', 'member1': {'@name': 'employee', '@cardinality': 'one', '@primary_key': 'number'}, 'member2': {'@name': 'dependents', '@cardinality': 'many', '@primary_key': 'number'}}]
Это XML_file_1
?xml version="1.0"?>
<er name="company">
<entity name="employee">
<attribute name="number" value="primary_key"/>
<attribute name="name" type="composite_parent" />
<attribute name="first_name" type="composite_child"/>
<attribute name="middle_name" type="composite_child"/>
<attribute name="last_name" type="composite_child"/>
<attribute name="salary"/>
<attribute name="address"/>
<attribute name="gender"/>
<attribute name="date_of_birth"/>
</entity>
</er>
Ожидаемый результат:
<?xml version="1.0"?>
<er name="company">
<entity name="employee">
<attribute name="number" value="primary_key"/>
<attribute name="name" type="composite_parent" />
<attribute name="first_name" type="composite_child"/>
<attribute name="middle_name" type="composite_child"/>
<attribute name="last_name" type="composite_child"/>
<attribute name="salary"/>
<attribute name="address"/>
<attribute name="gender"/>
<attribute name="date_of_birth"/>
</entity>
.....
<relation name="work" degree="binary" type="many_to_many">
<member1 name="employee" cardinality="many" primary_key = "number"/>
<member2 name="project" cardinality="many" primary_key = "number"/>
<attribute name="hours_per_week"/>
</relation>
<relation name="assign" degree="binary" type="one_to_many">
<member1 name="employee" cardinality="many" primary_key = "number"/>
<member2 name="department" cardinality="one" primary_key = "number"/>
</relation>
......
</er>
Я создал другой файл XML, используя приведенный выше список словарей, но это не так, как ожидается. Потому что я должен дать корневое значение.
<?xml version="1.0" encoding="utf-8"?>
<er>
.....
<relation name="controls" degree="binary" type="one_to_many">
<member1 name="projects" cardinality="many" primary_key="number"></member1>
<member2 name="department" cardinality="one" primary_key="number"></member2>
</relation>
<relation name="related_with" degree="binary" type="one_to_many">
<member1 name="employee" cardinality="one" primary_key="number"></member1>
<member2 name="dependents" cardinality="many" primary_key="number"></member2>
</relation>
.....
Код:
output_dic = {'er':{'relation':relation}}
with open('new_data_2.json', 'w+') as json_file:
json.dump(output_dic, json_file, indent=4, sort_keys=True)
output_xml = xmltodict.unparse(output_dic, pretty=True)
with open('output.xml', 'w+') as xml_file:
xml_file.write(output_xml)
Затем я пытаюсь объединить эти два файла XML вместе, но японятия не имею, как его записать в файл.
Код для объединения XML-файлов:
def run(folder):
files = glob.glob(folder + "/*.xml")
first = None
for filename in files:
data = ElementTree.parse(filename).getroot()
if first is None:
first = data
else:
first.extend(data)
if first is not None:
print(ElementTree.tostring(first))
Пожалуйста, дайте мне некоторую идею для создания ожидаемого вывода.